Esempio n. 1
0
        public static void AddAutomationEventHandler(AutomationEvent eventId, AutomationElement element, TreeScope scope, AutomationEventHandler eventHandler)
        {
            Utility.ValidateArgumentNonNull(element, "element");
            Utility.ValidateArgumentNonNull(eventHandler, "eventHandler");
            Utility.ValidateArgument(eventId != AutomationElement.AutomationFocusChangedEvent, "Use FocusChange notification instead");
            Utility.ValidateArgument(eventId != AutomationElement.StructureChangedEvent, "Use StructureChange notification instead");
            Utility.ValidateArgument(eventId != AutomationElement.AutomationPropertyChangedEvent, "Use PropertyChange notification instead");

            try
            {
                BasicEventListener listener = new BasicEventListener(eventId, element, eventHandler);
                Factory.AddAutomationEventHandler(
                    eventId.Id,
                    element.NativeElement,
                    (UIAutomationClient.TreeScope)scope,
                    CacheRequest.CurrentNativeCacheRequest,
                    listener);
                ClientEventList.Add(listener);
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                Exception newEx; if (Utility.ConvertException(e, out newEx))
                {
                    throw newEx;
                }
                else
                {
                    throw;
                }
            }
        }
        public static void AddStructureChangedEventHandler(AutomationElement element, TreeScope scope, StructureChangedEventHandler eventHandler)
        {
            Utility.ValidateArgumentNonNull(element, "element");
            Utility.ValidateArgumentNonNull(eventHandler, "eventHandler");
            Utility.ValidateArgumentNonNull(eventHandler, "eventHandler");

            try
            {
                StructureEventListener listener = new StructureEventListener(AutomationElement.StructureChangedEvent, element, eventHandler);
                Factory.AddStructureChangedEventHandler(
                    element.NativeElement,
                    (TreeScope)scope,
                    CacheRequest.CurrentNativeCacheRequest,
                    listener);
                ClientEventList.Add(listener);
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                Exception newEx; if (Utility.ConvertException(e, out newEx))
                {
                    throw newEx;
                }
                else
                {
                    throw;
                }
            }
        }
Esempio n. 3
0
        public static void RemoveAutomationEventHandler(AutomationEvent eventId, AutomationElement element, AutomationEventHandler eventHandler)
        {
            Utility.ValidateArgumentNonNull(element, "element");
            Utility.ValidateArgumentNonNull(eventHandler, "eventHandler");
            Utility.ValidateArgument(eventId != AutomationElement.AutomationFocusChangedEvent, "Use FocusChange notification instead");
            Utility.ValidateArgument(eventId != AutomationElement.StructureChangedEvent, "Use StructureChange notification instead");
            Utility.ValidateArgument(eventId != AutomationElement.AutomationPropertyChangedEvent, "Use PropertyChange notification instead");

            try
            {
                BasicEventListener listener = (BasicEventListener)ClientEventList.Remove(eventId, element, eventHandler);
                Factory.RemoveAutomationEventHandler(eventId.Id, element.NativeElement, listener);
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                Exception newEx; if (Utility.ConvertException(e, out newEx))
                {
                    throw newEx;
                }
                else
                {
                    throw;
                }
            }
        }
Esempio n. 4
0
 /// <summary>
 ///     Returns null, if incomplete EventMessageArray.
 /// </summary>
 /// <param name="eventList"></param>
 /// <param name="eventMessages"></param>
 /// <returns></returns>
 private Server.EventMessage[]? EventMessagesCallback(ClientEventList eventList, EventMessagesCollection eventMessagesCollection)
 {
     Server.EventMessage[]? newEventMessages = eventList.EventMessagesCallback(eventMessagesCollection);
     if (newEventMessages is not null && newEventMessages.Length > 0)
     {
         eventList.RaiseEventMessagesCallbackEvent(newEventMessages);
     }
     return(newEventMessages);
 }
Esempio n. 5
0
 public static void RemoveAllEventHandlers()
 {
     try
     {
         Factory.RemoveAllEventHandlers();
         ClientEventList.Clear();
     }
     catch (System.Runtime.InteropServices.COMException e)
     {
         Exception newEx; if (Utility.ConvertException(e, out newEx))
         {
             throw newEx;
         }
         else
         {
             throw;
         }
     }
 }
Esempio n. 6
0
        public Server.EventMessage[] ReadEventMessagesJournal(ClientEventList clientEventList, DateTime firstTimestampUtc, DateTime secondTimestampUtc, CaseInsensitiveDictionary <string>?params_)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("Cannot access a disposed ClientContext.");
            }

            if (!ServerContextIsOperational)
            {
                throw new InvalidOperationException();
            }

            try
            {
                while (true)
                {
                    var request = new ReadEventMessagesJournalRequest
                    {
                        ContextId       = _serverContextId,
                        ListServerAlias = clientEventList.ListServerAlias,
                        FirstTimestamp  = DateTimeHelper.ConvertToTimestamp(firstTimestampUtc),
                        SecondTimestamp = DateTimeHelper.ConvertToTimestamp(secondTimestampUtc),
                    };
                    if (params_ is not null)
                    {
                        request.Params.Add(params_);
                    }
                    ReadEventMessagesJournalReply reply = _resourceManagementClient.ReadEventMessagesJournal(request);
                    SetResourceManagementLastCallUtc();

                    var result = clientEventList.EventMessagesCallback(reply.EventMessagesCollection);
                    if (result is not null)
                    {
                        return(result);
                    }
                }
            }
            catch (Exception ex)
            {
                ProcessRemoteMethodCallException(ex);
                throw;
            }
        }
Esempio n. 7
0
 public static void AddAutomationFocusChangedEventHandler(AutomationFocusChangedEventHandler eventHandler)
 {
     Utility.ValidateArgumentNonNull(eventHandler, "eventHandler");
     try
     {
         FocusEventListener listener = new FocusEventListener(eventHandler);
         Factory.AddFocusChangedEventHandler(CacheRequest.CurrentNativeCacheRequest, listener);
         ClientEventList.Add(listener);
     }
     catch (System.Runtime.InteropServices.COMException e)
     {
         Exception newEx; if (Utility.ConvertException(e, out newEx))
         {
             throw newEx;
         }
         else
         {
             throw;
         }
     }
 }
Esempio n. 8
0
        public static void RemoveAutomationFocusChangedEventHandler(AutomationFocusChangedEventHandler eventHandler)
        {
            Utility.ValidateArgumentNonNull(eventHandler, "eventHandler");

            try
            {
                FocusEventListener listener = (FocusEventListener)ClientEventList.Remove(AutomationElement.AutomationFocusChangedEvent, null, eventHandler);
                Factory.RemoveFocusChangedEventHandler(listener);
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                Exception newEx; if (Utility.ConvertException(e, out newEx))
                {
                    throw newEx;
                }
                else
                {
                    throw;
                }
            }
        }
Esempio n. 9
0
        public static void AddAutomationPropertyChangedEventHandler(AutomationElement element, TreeScope scope, AutomationPropertyChangedEventHandler eventHandler, params AutomationProperty[] properties)
        {
            Utility.ValidateArgumentNonNull(element, "element");
            Utility.ValidateArgumentNonNull(eventHandler, "eventHandler");
            Utility.ValidateArgumentNonNull(properties, "properties");
            if (properties.Length == 0)
            {
                throw new ArgumentException("AtLeastOnePropertyMustBeSpecified");
            }
            int[] propertyIdArray = new int[properties.Length];
            for (int i = 0; i < properties.Length; ++i)
            {
                Utility.ValidateArgumentNonNull(properties[i], "properties");
                propertyIdArray[i] = properties[i].Id;
            }

            try
            {
                PropertyEventListener listener = new PropertyEventListener(AutomationElement.StructureChangedEvent, element, eventHandler);
                Factory.AddPropertyChangedEventHandler(
                    element.NativeElement,
                    (UIAutomationClient.TreeScope)scope,
                    CacheRequest.CurrentNativeCacheRequest,
                    listener,
                    propertyIdArray);
                ClientEventList.Add(listener);
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                Exception newEx; if (Utility.ConvertException(e, out newEx))
                {
                    throw newEx;
                }
                else
                {
                    throw;
                }
            }
        }
Esempio n. 10
0
        public static void RemoveStructureChangedEventHandler(AutomationElement element, StructureChangedEventHandler eventHandler)
        {
            Utility.ValidateArgumentNonNull(element, "element");
            Utility.ValidateArgumentNonNull(eventHandler, "eventHandler");

            try
            {
                StructureEventListener listener = (StructureEventListener)ClientEventList.Remove(AutomationElement.StructureChangedEvent, element, eventHandler);
                Factory.RemoveStructureChangedEventHandler(element.NativeElement, listener);
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                Exception newEx; if (Utility.ConvertException(e, out newEx))
                {
                    throw newEx;
                }
                else
                {
                    throw;
                }
            }
        }
Esempio n. 11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="eventList"></param>
        /// <returns></returns>
        public Server.EventMessage[] PollEventsChanges(ClientEventList eventList)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("Cannot access a disposed ClientContext.");
            }

            if (!ServerContextIsOperational)
            {
                throw new InvalidOperationException();
            }

            try
            {
                while (true)
                {
                    var request = new PollEventsChangesRequest
                    {
                        ContextId       = _serverContextId,
                        ListServerAlias = eventList.ListServerAlias
                    };
                    PollEventsChangesReply reply = _resourceManagementClient.PollEventsChanges(request);
                    SetResourceManagementLastCallUtc();

                    var newEventMessages = EventMessagesCallback(eventList, reply.EventMessagesCollection);
                    if (newEventMessages is not null)
                    {
                        return(newEventMessages);
                    }
                }
            }
            catch (Exception ex)
            {
                ProcessRemoteMethodCallException(ex);
                throw;
            }
        }
Esempio n. 12
0
        private async Task ReadCallbackMessagesAsync(IAsyncStreamReader <CallbackMessage> reader, CancellationToken cancellationToken)
        {
            while (true)
            {
                if (!_serverContextIsOperational || cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                try
                {
                    if (!await reader.MoveNext(cancellationToken))
                    {
                        return;
                    }
                }
                //catch (RpcException e) when (e.StatusCode == StatusCode.NotFound)
                //{
                //    break;
                //}
                //catch (OperationCanceledException)
                //{
                //    break;
                //}
                catch
                {
                    return;
                }

                if (!_serverContextIsOperational || cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                CallbackMessage current = reader.Current;
                _callbackDispatcher.BeginInvoke(ct =>
                {
                    if (ct.IsCancellationRequested)
                    {
                        return;
                    }
                    try
                    {
                        switch (current.OptionalMessageCase)
                        {
                        case CallbackMessage.OptionalMessageOneofCase.ContextInfo:
                            ContextInfo serverContextInfo = current.ContextInfo;
                            ServerContextInfo             = serverContextInfo;
                            break;

                        case CallbackMessage.OptionalMessageOneofCase.ElementValuesCallback:
                            ElementValuesCallback elementValuesCallback = current.ElementValuesCallback;
                            ClientElementValueList datalist             = GetElementValueList(elementValuesCallback.ListClientAlias);
                            ElementValuesCallback(datalist, elementValuesCallback.ElementValuesCollection);
                            break;

                        case CallbackMessage.OptionalMessageOneofCase.EventMessagesCallback:
                            EventMessagesCallback eventMessagesCallback = current.EventMessagesCallback;
                            ClientEventList eventList = GetEventList(eventMessagesCallback.ListClientAlias);
                            EventMessagesCallback(eventList, eventMessagesCallback.EventMessagesCollection);
                            break;

                        case CallbackMessage.OptionalMessageOneofCase.LongrunningPassthroughCallback:
                            LongrunningPassthroughCallback longrunningPassthroughCallback = current.LongrunningPassthroughCallback;
                            LongrunningPassthroughCallback(longrunningPassthroughCallback);
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, "Callback message exception.");
                    }
                });
            }
        }