C++ 如何实际定制IE上下文菜单?

C++ 如何实际定制IE上下文菜单?,c++,internet-explorer,activex,browser,C++,Internet Explorer,Activex,Browser,我需要在IE上下文菜单中添加一个菜单项。当你右键点击IE时,它类似于谷歌定制的上下文菜单“搜索谷歌搜索xxx” 我做了一项研究,发现在IE BHO中覆盖IDocHostUIHandler::ShowContextMenu可以定制IE上下文菜单。示例项目可以在codeproject中发布的Popup blocker项目中找到。它工作良好,易于实现但是这种方法有一个问题。问题是,它将与其他附加组件根据MSDN进行的上下文菜单自定义相冲突。 在MSDN Internet Explorer中心论坛上,有

我需要在IE上下文菜单中添加一个菜单项。当你右键点击IE时,它类似于谷歌定制的上下文菜单“搜索谷歌搜索xxx”

我做了一项研究,发现在IE BHO中覆盖IDocHostUIHandler::ShowContextMenu可以定制IE上下文菜单。示例项目可以在codeproject中发布的Popup blocker项目中找到。它工作良好,易于实现但是这种方法有一个问题。问题是,它将与其他附加组件根据MSDN进行的上下文菜单自定义相冲突。

在MSDN Internet Explorer中心论坛上,有一些关于此主题的讨论。然而,没有一个适当的实施张贴

如果有人对此有经验,请分享你的想法。谢谢

请参见MSDN上的

对于一些示例代码,请下载并提取(该机制在IE版本(包括8)中仍然有效)。查看
ie5wa.inf
*.html
,了解各种IE上下文菜单扩展的示例

请注意,abive是在没有COM的情况下实现的,完全是通过一个注册表设置和一个包含脚本(Javascript、JScript、VBScript等)的文件实现的。如果您的菜单操作逻辑驻留在这样的对象中,则脚本(JScript、VBScript)可以反过来使用COM对象,例如

  • 创建
    HKCU\Software\Microsoft\internetexplorer\MenuExt\My&Context Menu“注册表项(
    &`
  • 设置键的默认值,以指向包含实现上下文菜单操作的脚本代码的文件,该脚本代码可能与COM对象交互(必须支持
    IDispatch
    IIRC;也可以在
  • 创建一个二进制
    contexts
    值(
    0x02
    用于图像,
    0x10
    用于选择,等等),该值控制何时应显示新的上下文菜单

为了导航到选定的文本,我自定义了IE。您可以阅读全文并获得详细的源代码

我的解决方案的核心是以下javascript代码和注册表项[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuText]:

  var parentwin = external.menuArguments;
  var doc = parentwin.document;
  var sel = doc.selection;
  var rng = sel.createRange();
  var str = new String(rng.text);

  if(0 < str.length)
  {
    if (str.indexOf("http")!=0)
        window.open("http://"+str, "_blank");
    else 
        window.open(str, "_blank");
  }
var parentwin=external.menuArguments;
var doc=parentwin.document;
var sel=单据选择;
var rng=sel.createRange();
var str=新字符串(rng.text);
如果(0
当然,为了导航到“google.com/search?q=”而不是导航到“google.com/search?q=”您最终会自定义我的javascript代码