玩转C科技.NET

从学会做人开始认识这个世界!http://volnet.github.io

导航

【IE扩展】增加菜单项

adding_menu_items 

作为一个可扩展的系统,IE提供了优良的可扩展性,它的步骤可以很复杂,也可以很简单。这里我就以一个简单的示例来演示一下如何为IE增加一个简单的扩展。

首先,我们需要向注册表中添加一个扩展键值,通过这个预置的外部接口,我们可以添加必要的参数和IE进行交互。这里我们要求我们的IE版本起码在IE5之后。

生成GUID

可以利用Visual Studio的工具->创建GUID工具创建GUID。

generate GUID

添加注册表项

方法一:打开注册表编辑器(在“开始”->“运行”输入“regedit”(不含引号),确定进入),找到下列键值:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Extensions

其中HKEY_CURRENT_USER部分可以替换为HKEY_LOCAL_MACHINE,这样的替换将导致后续的操作将作用于本机的所有用户,而HKEY_CURRENT_USER则只影响本机的当前用户。

在Extensions节点上添加新项,其名称即为之前所创建的GUID。在该GUID下创建相应的项,这些项的名称和内容按下表所示:

CLSID:这里将这个值设置为{1FBA04EE-3024-11d2-8F1F-0000F87ABD16},这个值说明是CLSID_Shell_ToolbarExtExec的扩展类。

MenuText:这个值将被用于菜单名的显示。

MenuCustomize:这个值可选,用于指示菜单项应该出现在哪?如果要出现在“帮助”旗下,那就设置它为“help”,设置成别的选项或者压根不设置都将导致这个菜单被放置到“工具”一栏中。

MenuStatusBar:这个值可选,用于在菜单项被选择的时候在状态栏中会提示相关的提示信息。

按动菜单必然需要触发点事件,对IE的扩展需要更加方便的方式,而不是重新修改IE的代码再编译,这通常也不被允许。IE提供的拓展方式有3种,执行一个COM组件、执行一段脚本或者是执行一个可执行程序。而这些需要我们设置相应的值,它们分别是:

ClsidExtension:我们首先需要有一个实现了IOleCommandTarget接口的COM对象,然后再将它注册,将COM对象的GUID值作为该项的值。
Script:我们可以在本地磁盘创建一份脚本文件(根据我的经验,可以是
*.html,*.htm,*.js等可以执行脚本的文件类型),然后将它们的路径作为该项的值。例如:file://C:\plug-in.htm
Exec:与Script基本类似,这里要求添加一个exe文件的路径作为该项的值。


以上各项可以并存,运行该菜单的时候就可以执行相应代码了。

这里我以Script为例,做一个字数统计的示例。

添加脚本代码:

<script type="text/javascript">
var win = external.menuArguments;
var document = external.menuArguments.document;
function OnContextMenu(){
    
//MSDN : selection Object
    //http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx
    var range = document.selection.createRange();
    
var str = new String(range.text);
    
    
var length = str.length;
    
var output = "";
    
    
if(length == 0)
        output 
+= "请选择一段文字!\n";
    
else {
        output 
+= "文字的长度为 = " + length + "。\n";

        
//calculate how much this subString in the document
        var displayTime = document.body.innerText.split(str).length-1;

        output 
+= "该文本在该页面中一共出现" + displayTime + "次。\n";
    }
    showMessage(output);
}

function showMessage(message){
    alert(message);
}

OnContextMenu();

</script>

添加脚本代码路径:

名称Script,值http://www.cnblogs.com/volnet/admin/file:///C:/plug-in.htm(把文件放在C盘之下),并设置ClSID和MenuText值

运行后选择文本,然后在菜单中找到添加项。

方法二:除了使用注册表编辑器进行手动添加,我们也可以通过*.reg文件直接向注册表导入该项目,保存下面的文本为<filename>.reg,并运行它们即可,根据上文设置相应的值。

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Extensions\{4D566E3D-15E7-43ed-B2BF-FDC6EE6C98C3}]
@=""
"MenuStatusBar"="Calculate the count of charactor in the selected word."
"MenuCustomize"="help"
"MenuText"="Word Count"
"CLSID"="{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}"
"Exec"="file://E:\\MyCSharpProject\\JavaScript\\HelloWorld.exe"
"Script"="file://E:\\MyCSharpProject\\JavaScript\\plug-in.html"
"ClsidExtension"=""

以上步骤完成了对IE的菜单进行扩展。

同样类似的还有Standard Context Menu(标准上下文菜单)。使用同样的脚本我们可以添加标准上下文菜单。这一步骤仅需我们的浏览器为IE4.0以上即可(之前的步骤要求5.0以上)

我们经常见到在页面中右键,有迅雷下载,添加到QQ表情等,你知道他们是怎么制作的吗?在注册表打开以下键值:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt

在其下添加脚本文件(和菜单项不同的是它只允许脚本形式而不允许COM对象和可执行文件。)

该项的默认值填写执行脚本的路径,如http://www.cnblogs.com/volnet/admin/file:///C:/plug-in.htm

再添加DWORD值,键名为Contexts,其值是由一组二进制标识符通过“位或”的方式叠加的。下表标明它们的含义。

0x01    CONTEXT_MENU_DEFAULT    在默认情况下在页面的任何位置右键可获得该菜单。
0x02    CONTEXT_MENU_IMAGE    只有图像才允许显示该菜单。
0x04    CONTEXT_MENU_CONTROL    form才允许显示该菜单。
0x08    CONTEXT_MENU_TABLE    tables才允许显示该菜单。
0x10    CONTEXT_MENU_TEXTSELECT    选中文本才允许显示该菜单, 也包括选中区域内的图像。
0x20    CONTEXT_MENU_ANCHOR    链接才允许显示该菜单,不包括链接的图像以及图像地图。
0x40    CONTEXT_MENU_UNKNOWN    在以上任何一个提到的可能性以外(这通常不可能)。

 

好了,下面让我们添加之前的Word Count的代码。

地址不变,我们要求在HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt下创建“字数统计”,在默认中添加C:\plug-in.htm,右键新建DWORD值,名称Contexts,类型REG_DWORD,数据0x30(由0x10|0x20得出,表示我们只在选取文本同时也包括链接文本的时候,才显示“字数统计”菜单)。

同理,我们也可以用*.reg的文件来描述上述过程。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\字数统计]
"Contexts"=dword:00000030
@="E:\\MyCSharpProject\\JavaScript\\plug-in.html"

 

 

至此我们已经将脚本plug-in.htm正确部署到IE中去了。

您是否见过如下图所示的工具栏呢?(IE8中,IE6之前的版本是以图标栏的方式来显示)

之前的步骤并不会让我们添加该选项。但是却为我们完成了很多的工作。下面我们只需要再修改注册表即可。

在对应的GUID下(...\Extension\<GUID>\)添加ButtonText,设置它的值为“字数统计”。

前面还有个漂亮的图标呢!自己制作一个图标或者在系统中找到一个漂亮的图标(*.ICO)或者在*.dll中引用图标资源形如:"example.dll, <your icon name>.ico"即可。在对应GUID下添加Icon,它的值为*.ICO的完整路径。另添加一个HotIcon,方法与Icon一致。二者的区别是HotIcon是指表示在鼠标移到自定义按钮上时,按钮上所显示的图标。而Icon则是正常显示的风格。但是在IE8下似乎没有什么特别的。不知道IE6下是否会有所区别。

有一个可选的Default Visable,在<GUID>下添加Default Visable,设置它的值为“Yes”或“No”。言下之意就是是否默认显示。但是这里要注意一点就是如果通过工具栏的“自定义工具栏”进行了设置,那么该项将无效。

另外有个可选的Lang####,其中####为语言编号。比如简体中文为0x0804(可以查阅这里),则为Lang0804。

在执行命令上,上面提到的三种均被支持(COM对象的调用(如常见的“Gears设置”)、Script调用(如本示例的“字数统计”)、还有Exec的方式。)另外还有Explorer Bar的显示控制(如“Research”)

方式:在<GUID>下添加CLSID或者修改CLSID为:{E0DD6CAB-2D10-11D2-8F1A-0000F87ABD16}指定调用CLSID_Shell_ToolbarExtBand扩展,之前调用的是CLSID_Shell_ToolbarExtExec类。然后添加一个项为BandCLSID,它的值为代显示的Explorer Bar的GUID,如果您没有这么一个Bar,可以先用Research的GUID代替一下:{FF059E31-CC5A-4E2E-BF3B-96E929D65503}。

 

发现一个网站可以自助建IEToolbar:(PDF文件)

https://files.cnblogs.com/volnet/how_make_toolbar_in_ieshow.net.rar 

posted on 2008-09-26 02:18  volnet(可以叫我大V)  阅读(4316)  评论(3编辑  收藏  举报

使用Live Messenger联系我
关闭