我可以在C#中使用窗口挂钩来确定窗口是否增益或失去焦点?

时间:2010-10-07 23:42:10

标签: c# automation

我编写了一个自动化IE实例的c#应用程序。我想知道互联网浏览器何时获得关注以及何时失去焦点。

从SHDocVw.InternetExplorer对象我可以得到它的HWND。从那里我怎么能创建一个消息钩子来接收WM_KILLFOCUS和WM_FOCUS事件(假设那些是正在侦听的正确事件:))?

谢谢大家!!

更新:我找到了一种方法可以用来实现上述目标而不使用钩子(我还没有弄清楚如何在c#中做),使用这个question中的.NET框架。

此代码的问题

    AutomationFocusChangedEventHandler focusHandler 
       = new AutomationFocusChangedEventHandler(OnFocusChanged);
    Automation.AddAutomationFocusChangedEventHandler(focusHandler);

是一个窗口很容易成为前景窗口,当该窗口切换到该窗口时该事件不会触发,因为它正在等待特定的UI元素聚焦。 (为了测试这个,您可以使用一个使用该代码的函数,并在每次新窗口聚焦时打印一条消息,例如MSDN示例TrackFocus,然后单击一个webbrowser。当大多数网页或空白页面显示在浏览器事件不会触发,直到地址栏或其他一些元素被选中。)如果有一种方法可以修改它可能会起作用,如果没有UI元素聚焦或每次元素丢失,它都可以抛出事件焦点(相反,当它集中注意力时被抛出)。任何人对如何修复上述代码以解决我的问题都有任何想法?

更新2:我刚刚遇到这个(article claims you can only hook to mouse and keyboard from c#),这可能意味着我根本不能使用钩子来做我想做的事。

1 个答案:

答案 0 :(得分:1)

有关从C#设置挂钩的详细说明,请访问:http://support.microsoft.com/kb/318804/en-us?fr=1

相关问题