C#:检测哪个应用程序具有焦点

时间:2010-02-02 11:17:47

标签: c#

我正在寻找创建一个C#应用程序,根据当前具有焦点的应用程序来更改内容。因此,如果用户使用的是Firefox,我的应用就会知道。适用于Chrome,Visual Studio,TweetDeck等。

这是可能的,如果是这样的话 - 我将如何实现它?

我有一种感觉,我要求的很多 - 但值得一试。

非常感谢提前。

3 个答案:

答案 0 :(得分:8)

这可以使用作为WPF一部分的Automation framework在纯.NET中完成。添加对UIAutomationClientUIAutomationTypes的引用,并使用Automation.AddAutomationFocusChangedEventHandler,例如:

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

答案 1 :(得分:7)

查看Application.AddMessageFilter,查找WM_ACTIVATEAPP消息,它会告诉您应用程序何时被激活,即获得焦点。

答案 2 :(得分:4)

哎呀。通常情况下,我在发布这个问题之前花了一些时间谷歌搜索。

一旦我最终发布了这个问题,我的下一个Google搜索就会显示答案。

我还没有对它进行测试,但看起来好像是GetForegroundWindow()

而不是我重写已编写的内容,这里是指向提供信息的页面的链接:

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

任何人的时间都可以通过询问可吸收的(?)答案而浪费时间。