Example #1
0
        private void OnFocusChanged(object sender, AutomationFocusChangedEventArgs e)
        {
            try
            {
                AutomationElement elementFocused = sender as AutomationElement;

                if (IsInvalidAutomationElement(elementFocused))
                {
                    return;
                }

                AutomationElement newTopLevelWindow = GetTopLevelWindow(elementFocused);

                if (IsInvalidAutomationElement(newTopLevelWindow))
                {
                    return;
                }

                if (newTopLevelWindow != lastTopLevelWindow)
                {
                    if (IsExplorerWindow(lastTopLevelWindow))
                    {
                        RemoveSelectionEvenhandler(lastTopLevelWindow);
                    }

                    if (IsExplorerWindow(newTopLevelWindow))
                    {
                        Debug.WriteLine("Focus moved to new top-level explorer window " + newTopLevelWindow.Current.Name);

                        AddSelectionEvenhandler(newTopLevelWindow);

                        ExplorerWindowGotFocus?.Invoke(this, new IntPtr(newTopLevelWindow.Current.NativeWindowHandle));
                    }
                    else
                    {
                        Debug.WriteLine("Focus moved to new top-level non-explorer window " + newTopLevelWindow.Current.Name);
                    }

                    lastTopLevelWindow = newTopLevelWindow;
                }
            }
            catch (ElementNotAvailableException ex)
            {
                Debug.WriteLine("SelectionMonitor: Fail OnFocusChanged " + ex.ToString());
            }
        }
Example #2
0
 private void OnMessage(XDMessageEventArgs msg)
 {
     if (msg.DataGram.Channel == "SelectionOfExplorerWindowChanged")
     {
         if (int.TryParse(msg.DataGram.Message, out int hwndInteger))
         {
             IntPtr hwnd = new IntPtr(hwndInteger);
             ExplorerSelectionChanged?.Invoke(this, new ExplorerMonitorEventArgs(hwnd));
         }
     }
     else if (msg.DataGram.Channel == "ExplorerWindowGotFocus")
     {
         if (int.TryParse(msg.DataGram.Message, out int hwndInteger))
         {
             IntPtr hwnd = new IntPtr(hwndInteger);
             ExplorerWindowGotFocus?.Invoke(this, new ExplorerMonitorEventArgs(hwnd));
         }
     }
 }