我编写了一个自动化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#),这可能意味着我根本不能使用钩子来做我想做的事。