我可以使用ChangeWindowMessageFilter从保护模式IE接收DocumentComplete事件吗?

时间:2009-06-07 05:20:58

标签: c++ windows-vista activex browser uac

在我的应用中,我想打开一个新的IE窗口,然后接收并处理从新打开的IE触发的 DocumentComplete NavigateComplete2 事件。在XP中,一切正常。在Vista中,新IE正在保护模式下运行,因此我的应用程序无法从IE接收DocumentCompelte事件。

我不想更改任何安全级别,例如在保护模式下打开IE或关闭我的应用程序完整性。我想知道我是否可以使用ChangeWindowsMessageFilter从保护模式IE接收DocumentComplete和NavigateComplete2事件?我的代码就像:

   ChangeWindowMessageFilter(DISPID_DOCUMENTCOMPELTE, MSGFLT_ADD );
   ChangeWindowMessageFilter(DISPID_NAVIGATECOMPLETE2, MSGFLT_ADD );

谢谢!

1 个答案:

答案 0 :(得分:1)

没有。 ChangeWindowMessageFilter()仅适用于Window Messages(例如WM_CREATE)。

DWebBrowserEvents2()“messages”是通过COM调用的Dispinterface事件,与Window Messages无关。

编辑:

来自documentation

  

如果您的应用程序启动Internet   资源管理器使用CoCreateInstance和   你需要继续控制   IE推出后的导航,你   可以使用IWebBrowser2进行导航   Internet Explorer以编程方式。   你只能继续控制   IE启动后的导航如果   你的申请也一样   完整性级别作为IE流程   推出。一旦你的申请   导航到不同的URL   诚信IE流程,你不能   执行其他导航。您   应该使IE框架可见   导航

所以我怀疑你是一个类似问题的受害者。您需要将流程作为低完整性流程运行,或者以更高的完整性级别运行Web浏览器。有关如何控制应用启动方式(清单)的详细信息,请参阅此document

如果您实际上不需要完整的浏览器,请考虑CoCreateInstance(CLSID_WebBrowser)