C#: Detecting which application has focus

前端 未结 3 1769
星月不相逢
星月不相逢 2020-11-28 08:27

I\'m looking to create a C# application that changes content according to which application currently has focus. So if the user is using Firefox, my app would know that. Sam

相关标签:
3条回答
  • 2020-11-28 08:36

    This can be done in pure .NET using the Automation framework that is part of the WPF. Add references to UIAutomationClient and UIAutomationTypes and use Automation.AddAutomationFocusChangedEventHandler, e.g.:

    public class FocusMonitor
    {
        public FocusMonitor()
        {
            AutomationFocusChangedEventHandler focusHandler = OnFocusChanged;
            Automation.AddAutomationFocusChangedEventHandler(focusHandler);
        }
    
        private void OnFocusChanged(object sender, AutomationFocusChangedEventArgs e)
        {
            AutomationElement focusedElement = sender as AutomationElement;
            if (focusedElement != null)
            {
                int processId = focusedElement.Current.ProcessId;
                using (Process process = Process.GetProcessById(processId))
                {
                    Debug.WriteLine(process.ProcessName);
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-28 08:36

    Grrr. As is often the way, I spent some time Googling before posting this question.

    Once I finally posted the question, my next Google search revealed the answer.

    I've yet to test it, but it looks as though GetForegroundWindow() is the key.

    Rather than me rewrite what's already written, here's a link to the page that provided the information:

    http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/

    Appologies for anyone's time I've wasted by asking a Googalable (?) answer.

    0 讨论(0)
  • 2020-11-28 08:38

    Take a look at Application.AddMessageFilter, and look for WM_ACTIVATEAPP messages, which will tell you when an app is activated, i.e. receives focus.

    0 讨论(0)
提交回复
热议问题