我正在寻找创建一个C#应用程序,根据当前具有焦点的应用程序来更改内容。因此,如果用户使用的是Firefox,我的应用就会知道。适用于Chrome,Visual Studio,TweetDeck等。
这是可能的,如果是这样的话 - 我将如何实现它?
我有一种感觉,我要求的很多 - 但值得一试。
非常感谢提前。
答案 0 :(得分:8)
这可以使用作为WPF一部分的Automation framework在纯.NET中完成。添加对UIAutomationClient
和UIAutomationTypes
的引用,并使用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/
任何人的时间都可以通过询问可吸收的(?)答案而浪费时间。