在我的应用中,我想打开一个新的IE窗口,然后接收并处理从新打开的IE触发的 DocumentComplete 和 NavigateComplete2 事件。在XP中,一切正常。在Vista中,新IE正在保护模式下运行,因此我的应用程序无法从IE接收DocumentCompelte事件。
我不想更改任何安全级别,例如在保护模式下打开IE或关闭我的应用程序完整性。我想知道我是否可以使用ChangeWindowsMessageFilter从保护模式IE接收DocumentComplete和NavigateComplete2事件?我的代码就像:
ChangeWindowMessageFilter(DISPID_DOCUMENTCOMPELTE, MSGFLT_ADD );
ChangeWindowMessageFilter(DISPID_NAVIGATECOMPLETE2, MSGFLT_ADD );
谢谢!
答案 0 :(得分:1)
没有。 ChangeWindowMessageFilter()仅适用于Window Messages(例如WM_CREATE)。
DWebBrowserEvents2()“messages”是通过COM调用的Dispinterface事件,与Window Messages无关。
编辑:
如果您的应用程序启动Internet 资源管理器使用CoCreateInstance和 你需要继续控制 IE推出后的导航,你 可以使用IWebBrowser2进行导航 Internet Explorer以编程方式。 你只能继续控制 IE启动后的导航如果 你的申请也一样 完整性级别作为IE流程 推出。一旦你的申请 导航到不同的URL 诚信IE流程,你不能 执行其他导航。您 应该使IE框架可见 导航
所以我怀疑你是一个类似问题的受害者。您需要将流程作为低完整性流程运行,或者以更高的完整性级别运行Web浏览器。有关如何控制应用启动方式(清单)的详细信息,请参阅此document。
如果您实际上不需要完整的浏览器,请考虑CoCreateInstance(CLSID_WebBrowser)
。