我正在尝试在Win8.1 / IE11上使用嵌入式浏览器窗口获取MFC / C ++应用程序,以便在edge
(最新标准)模式下呈现。窗口的内容在本地提供(即不是从网站提供)。
在头部使用<!DOCTYPE html>
和<meta http-equiv="X-UA-Compatible" content="IE=edge">
(第一件事)让我获得IE8渲染(IE5只有IE5,IE7只有DOCTYPE)。
我知道用于将您自己的进程名称添加到HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer
的注册表设置Main\FeatureControl\FEATURE_BROWSER_EMULATION
...这实际上有效并且在IE11中呈现一个主要问题:当我设置该功能时,应用程序恰好被命名为相同到中断的Microsoft应用程序!似乎注册表设置功能也不允许进程的完整路径名。我知道,重命名这个过程......但出于各种历史原因,我不能轻易做到这一点。所以......
我已经扩展了处理程序class MyDocHandler : public IDocHostUIHandler2, public IOleClientSite {...}
并在导航发生之前通过pOleObject->SetClientSite( pMyDocHandler );
使用它。我实现了IDocHostUIHandler2::GetOverrideKeyPath
,它被按预期调用,我返回自己的应用程序密钥路径(几乎与Microsoft的相同,即Software\MyCompany\Internet Explorer
代替Software\MyCompany
。我已经放了注册表在那条路径下设置,例如我的Software\MyCompany\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\MyProcess.exe
,但它似乎忽略了它。我已经尝试了一些不同的注册表路径选项,但我没有想法。哦,我也试过没有成功使用GetOptionKeyPath
。
此外,我已经尝试了another question中建议的HookRegOpenKeyExW
hack,但现在显然还有一些额外的存根库兼容性层,使其更加笨拙。
任何人都有一些见解?谢谢
答案 0 :(得分:1)
此外,我已经尝试了HookRegOpenKeyExW hack 在另一个问题中建议,但现在显然有几个 额外的存根库兼容性层使得更多 笨重。
作为替代方案,您可能需要按照RegOverridePredefKey
所述here进行尝试。