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; } } }
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; } } }
/// <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); }
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; } } }
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; } }
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; } } }
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; } } }
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; } } }
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; } } }
/// <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; } }
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."); } }); } }