今天在CSDN上看到有人在问在 IE 中,如何像迅雷那样,右键点击某个链接,在菜单中打开自定义的应用程序.
网上 Google 了一下, 找了一些文章,整理了一下,分享下,希望对以后有这样应用的朋友有所帮助.
- 首先当然要在右击链接时的显示的菜单中添加数据项.添加的方法如下.
1.1 开始菜单-->运行-->用 RegEdit 命令打开注册表.建议首先备份注册表.
1.2 将注册点定位到"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt", 在MenuExt 节点上点右键,选择 新建-->项.
1.3 给新建的项取一个名字,该名字就是后来在右击菜单时显示的名字.如果要设置快捷方式,可以用(&+字母)的方式.
1.4 给新建项的的默认值设置一个地址,比如E:\MyTest\TestIELink.html.当用户在IE的菜单中点击我们的菜单时,就会调用该文件,执行里面的脚本.我们待会会介绍怎么在文件中加入脚本,以执行我们自定义的程序.
1.5 给我们添加的自定义项再添加一个DWORD值.在右边的空白位置右键点击.新建-->DWORD(32-位)值.将名称改为:contexts(如果有填错,可以右击,选择重命名),双击contexts,在弹出的对话框中的数值数据项中输入20. contexts对象可以定义菜单在何时出现,我们可以使用它定义的值或组合.其值定义如下:
缺省 0x1 图片 0x2 控件 0x4 表单域 0x8 选择文本 0x10 锚点(链接) 0x20
如果我们想跟迅雷一样,想在图片和链接上点右键时显示我们的菜单,则可以输入22(图片+链接),如果没有设置contexts对象,则会在所有地方点击右键时显示我们定义的菜单.
最后的成果如下:
- 第二步就是编写脚本,以被调用,然后启动我们想要执行的程序.
2.1 打开记事本或者其它文本编辑器.输入:
1<script type="text/javascript">更多WScript Shell 对象请参见:http://msdn2.microsoft.com/en-us/library/aew9yb99.aspx
2 var win = window.external.menuArguments;
3 var arg = win.event.srcElement.href;
4 var wsh = new ActiveXObject("WScript.Shell");
5 var myExe = "\"E:\\My_App\\RecIELink.exe\" "; //最后一个引号前有一个空格,因为我们要给启动的应用程序传入参数.
6 wsh.run(myExe + arg, 1, true); //这里后面的 1 使打开的窗体处于焦点中, true 为等待窗口执行完毕.
7</script>
更多关于WScript.Shell 的 run 函数的参数请参见:http://msdn2.microsoft.com/en-us/library/d5fk67ky.aspx
2.2 将我们编写的内容保存到1.4中设置的地址下.如:E:\MyTest\TestIELink.html.
在这一步本人走了很多弯路,大约浪费了一个小时的时间来解决路径的问题.大家应该注意到.应用程序的路径前面都加了双引号.这传说是路径的一种约定,来解决路径中包含的空格等问题.我当时想在IE中启动FF,但是因为FF放在默认的路径下,所以一直提示路径出错,但是在没有空格的路径时就不会有什么问题.最后才了解到路径要加上引号,呵呵.如果大家在其它地方也遇到这样的问题,如路径中有空格时出错这样的怪问题,不妨给路径前后加上引号试试. - 至此,我们就已经完成了大部门的工作,现在我们来编写一个C#程序,来接收我们转过来的链接参数.
3.1 打开VS,新建一个控制台项目.
3.2 Main函数修改如下:
1static void Main(string[] args)
2 {
3 if (args.Length > 0)
4 {
5 Console.Write("I Recieved a link:");
6 Console.WriteLine(args[0]); //我们可以使用main中的args参数来获得我们传入的链接,并打印在屏幕上.
7 }
8 else
9 {
10 Console.WriteLine("Link lost.");
11 }
12 Console.Read();
13 }
3.3 打程序拷贝到"E:\My_App\",并更名为RecIELink.exe. - 好了,我们来测试一下我们的成果.
好了,你是否也成功了呢?
- 安全快速不中毒的浏览器:
- 写博客也能赚钱: