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

时间:2010-04-08 04:42:38

标签: c++ internet-explorer activex browser

我需要在IE上下文菜单中添加一个菜单项。当您右键单击IE时,它与Google自定义上下文菜单“搜索Google for xxx”类似。

我做了一项研究,发现在IE BHO中覆盖IDocHostUIHandler :: ShowContextMenu可以自定义IE上下文菜单。示例项目可以在codeproject中发布的Popup阻止程序项目中找到。它运行良好,易于实现。 然而这种方法存在问题。问题是它会与每个MSDN的其他附加组件的上下文菜单自定义冲突。

在MSDN Internet Explorer Center论坛中,有一些关于此主题的讨论。但是没有发布适当的实施。

如果有人有这方面的经验,请分享您的想法。谢谢!

2 个答案:

答案 0 :(得分:2)

请参阅MSDN上的 Adding Entries to the Standard Context Menu

对于某些示例代码,请下载并解压缩Web Accessories for Internet Explorer 5(该机制仍适用于IE版本,包括8)。查看ie5wa.inf*.html以获取各种IE上下文菜单扩展的示例。

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

  • menu accelerator字母之前创建HKCU\Software\Microsoft\Internet Explorer\MenuExt\My &Context Menu" registry key (&`,如果有的话)
  • 将键的默认值设置为指向包含实现上下文菜单操作的脚本代码的文件,可能与COM对象交互(必须支持IDispatch IIRC;同时阅读{ {3}})
  • 创建二进制contexts值(0x02用于图片,0x10用于选择等),用于调整何时应显示新的上下文菜单

答案 1 :(得分:0)

我自定义了IE以导航到所选文本。您可以阅读完整的故事并获得详细的源代码here

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

  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");
  }