开发者

C#: Detecting which application has focus

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. Same for Chrome, Visual Studio, TweetDeck etc.

Is this possible,开发者_JAVA百科 and if so - how would I go about achieving it?

I have a feeling I'm asking for to much - but it's worth a try.

Many thanks in advance.


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);
            }
        }
    }
}


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.


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜