/// <summary> /// Process Register event message /// </summary> /// <param name="msgData"></param> private void RegisterEventListener(EventListenerFactoryMessage msgData) { try { EventMessage m = null; var win32Helper = new Win32Helper(); switch (msgData.EventId) { case EventType.UIA_AutomationFocusChangedEventId: if (this.EventListenerFocusChanged == null) { var uia = (IUIAutomation)UIAutomation8 ?? UIAutomation; this.EventListenerFocusChanged = new FocusChangedEventListener(uia, msgData.Listener); } break; case EventType.UIA_StructureChangedEventId: if (this.EventListenerStructureChanged == null) { this.EventListenerStructureChanged = new StructureChangedEventListener(this.UIAutomation, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } break; case EventType.UIA_AutomationPropertyChangedEventId: if (this.EventListenerPropertyChanged == null) { this.EventListenerPropertyChanged = new PropertyChangedEventListener(this.UIAutomation, this.RootElement.PlatformObject, this.Scope, msgData.Listener, msgData.Properties); } break; case EventType.UIA_TextEdit_TextChangedEventId: if (this.EventListenerTextEditTextChanged == null) { this.EventListenerTextEditTextChanged = new TextEditTextChangedEventListener(this.UIAutomation8, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } break; case EventType.UIA_ChangesEventId: if (this.EventListenerChanges == null) { this.EventListenerChanges = new ChangesEventListener(this.UIAutomation8, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } break; case EventType.UIA_NotificationEventId: if (win32Helper.IsWindowsRS3OrLater()) { if (this.EventListenerNotification == null) { this.EventListenerNotification = new NotificationEventListener(this.UIAutomation8, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } } else { #pragma warning disable CA2000 // Call IDisposable.Dispose() m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null); #pragma warning restore CA2000 m.Properties = new List <KeyValuePair <string, dynamic> >() { new KeyValuePair <string, dynamic>("Message", "Event listener registration is rejected."), new KeyValuePair <string, dynamic>("Event Id", msgData.EventId), new KeyValuePair <string, dynamic>("Event Name", EventType.GetInstance().GetNameById(msgData.EventId)), new KeyValuePair <string, dynamic>("Reason", "Not supported platform"), }; msgData.Listener(m); } break; case EventType.UIA_ActiveTextPositionChangedEventId: if (win32Helper.IsWindowsRS5OrLater()) { if (this.EventListenerNotification == null) { this.EventListenerActiveTextPositionChanged = new ActiveTextPositionChangedEventListener(this.UIAutomation8, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } } else { #pragma warning disable CA2000 // Call IDisposable.Dispose() m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null); #pragma warning restore CA2000 m.Properties = new List <KeyValuePair <string, dynamic> >() { new KeyValuePair <string, dynamic>("Message", "Event listener registration is rejected."), new KeyValuePair <string, dynamic>("Event Id", msgData.EventId), new KeyValuePair <string, dynamic>("Event Name", EventType.GetInstance().GetNameById(msgData.EventId)), new KeyValuePair <string, dynamic>("Reason", "Not supported platform"), }; msgData.Listener(m); } break; default: if (this.EventListeners.ContainsKey(msgData.EventId) == false) { this.EventListeners.Add(msgData.EventId, new EventListener(this.UIAutomation, this.RootElement.PlatformObject, this.Scope, msgData.EventId, msgData.Listener)); } break; } #pragma warning disable CA2000 // Call IDisposable.Dispose() m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null); #pragma warning restore CA2000 m.Properties = new List <KeyValuePair <string, dynamic> >() { new KeyValuePair <string, dynamic>("Message", "Succeeded to register an event listener"), new KeyValuePair <string, dynamic>("Event Id", msgData.EventId), new KeyValuePair <string, dynamic>("Event Name", EventType.GetInstance().GetNameById(msgData.EventId)), }; msgData.Listener(m); if (msgData.EventId == EventType.UIA_AutomationFocusChangedEventId) { this.EventListenerFocusChanged.ReadyToListen = true; } } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception e) { e.ReportException(); #pragma warning disable CA2000 // Call IDisposable.Dispose() var m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null); #pragma warning restore CA2000 m.Properties = new List <KeyValuePair <string, dynamic> >() { new KeyValuePair <string, dynamic>("Message", "Failed to register an event listener"), new KeyValuePair <string, dynamic>("Event Id", msgData.EventId), new KeyValuePair <string, dynamic>("Event Name", EventType.GetInstance().GetNameById(msgData.EventId)), new KeyValuePair <string, dynamic>("Error", e.Message) }; msgData.Listener(m); } #pragma warning restore CA1031 // Do not catch general exception types }
/// <summary> /// Process Register event message /// </summary> /// <param name="msgData"></param> private void RegisterEventListener(EventListenerFactoryMessage msgData) { try { EventMessage m = null; switch (msgData.EventId) { case EventType.UIA_AutomationFocusChangedEventId: if (this.EventListenerFocusChanged == null) { this.EventListenerFocusChanged = new FocusChangedEventListener(this.UIAutomation, msgData.Listener); } break; case EventType.UIA_StructureChangedEventId: if (this.EventListenerStructureChanged == null) { this.EventListenerStructureChanged = new StructureChangedEventListener(this.UIAutomation, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } break; case EventType.UIA_AutomationPropertyChangedEventId: if (this.EventListenerPropertyChanged == null) { this.EventListenerPropertyChanged = new PropertyChangedEventListener(this.UIAutomation, this.RootElement.PlatformObject, this.Scope, msgData.Listener, msgData.Properties); } break; case EventType.UIA_TextEdit_TextChangedEventId: if (this.EventListenerTextEditTextChanged == null) { this.EventListenerTextEditTextChanged = new TextEditTextChangedEventListener(this.UIAutomation8, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } break; case EventType.UIA_ChangesEventId: if (this.EventListenerChanges == null) { this.EventListenerChanges = new ChangesEventListener(this.UIAutomation8, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } break; case EventType.UIA_NotificationEventId: if (NativeMethods.IsWindowsRS3OrLater()) { if (this.EventListenerNotification == null) { this.EventListenerNotification = new NotificationEventListener(this.UIAutomation8, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } } else { m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null); m.Properties = new List <KeyValuePair <string, dynamic> >() { new KeyValuePair <string, dynamic>("Message", "Event listener registration is rejected."), new KeyValuePair <string, dynamic>("Event Id", msgData.EventId), new KeyValuePair <string, dynamic>("Event Name", EventType.GetInstance().GetNameById(msgData.EventId)), new KeyValuePair <string, dynamic>("Reason", "Not supported platform"), }; msgData.Listener(m); } break; case EventType.UIA_ActiveTextPositionChangedEventId: if (NativeMethods.IsWindowsRS5OrLater()) { if (this.EventListenerNotification == null) { this.EventListenerActiveTextPositionChanged = new ActiveTextPositionChangedEventListener(this.UIAutomation8, this.RootElement.PlatformObject, this.Scope, msgData.Listener); } } else { m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null); m.Properties = new List <KeyValuePair <string, dynamic> >() { new KeyValuePair <string, dynamic>("Message", "Event listener registration is rejected."), new KeyValuePair <string, dynamic>("Event Id", msgData.EventId), new KeyValuePair <string, dynamic>("Event Name", EventType.GetInstance().GetNameById(msgData.EventId)), new KeyValuePair <string, dynamic>("Reason", "Not supported platform"), }; msgData.Listener(m); } break; default: if (this.EventListeners.ContainsKey(msgData.EventId) == false) { this.EventListeners.Add(msgData.EventId, new EventListener(this.UIAutomation, this.RootElement.PlatformObject, this.Scope, msgData.EventId, msgData.Listener)); } break; } m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null); m.Properties = new List <KeyValuePair <string, dynamic> >() { new KeyValuePair <string, dynamic>("Message", "Succeeded to register an event listener"), new KeyValuePair <string, dynamic>("Event Id", msgData.EventId), new KeyValuePair <string, dynamic>("Event Name", EventType.GetInstance().GetNameById(msgData.EventId)), }; msgData.Listener(m); if (msgData.EventId == EventType.UIA_AutomationFocusChangedEventId) { this.EventListenerFocusChanged.ReadyToListen = true; } } catch (Exception e) { var m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null); m.Properties = new List <KeyValuePair <string, dynamic> >() { new KeyValuePair <string, dynamic>("Message", "Failed to register an event listener"), new KeyValuePair <string, dynamic>("Event Id", msgData.EventId), new KeyValuePair <string, dynamic>("Event Name", EventType.GetInstance().GetNameById(msgData.EventId)), new KeyValuePair <string, dynamic>("Error", e.Message) }; msgData.Listener(m); } }