2009-06-07 92 views
0

在我的应用程序中,我想打开一个新的IE窗口,然后接收并处理DocumentCompleteNavigateComplete2从新打开的IE触发的事件。在XP中,一切正常。在Vista中,新的IE在保护模式下运行,所以我的应用程序无法从IE接收DocumentCompelte事件。我可以使用ChangeWindowMessageFilter从Protected Mode IE接收DocumentComplete事件吗?

我不想改变任何安全级别,像打开IE浏览器在保护模式下关闭或降低我的应用程序的完整性。我想知道是否可以使用ChangeWindowsMessageFilter从Protected Mode IE接收DocumentComplete和NavigateComplete2事件?我的代码是这样的:

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

谢谢!

回答

1

号ChangeWindowMessageFilter()仅适用于窗口消息(WM_CREATE,例如)。

的DWebBrowserEvents2()“信息”通过COM调用调度接口的事件,并有无关窗口消息。

编辑:

documentation

如果你的应用程序中使用的CoCreateInstance和 互联网 浏览器需要IE浏览器启动后继续控制 导航启动,您 可以使用的IWebBrowser2导航 Internet Explorer以编程方式。 如果您的应用程序具有与启动的IE进程 相同的 完整性级别,则只有在启动IE后才能继续控制 导航。一旦应用程序 导航不同 完整性IE进程中的URL,你不能 执行额外的导航。您 应导致 导航后可见的IE帧。

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

如果你实际上并不需要一个完整的浏览器,可以考虑CoCreateInstance(CLSID_WebBrowser)

+0

有没有办法在Vista中打开阻塞的Dispinterface事件?谢谢! – bionicoder 2009-06-07 05:41:04

相关问题