您的位置:首页 > 其它

在IE中像迅雷那样通过右击链接打开程序

2008-03-18 18:00 357 查看
首先当然要在右击链接时的显示的菜单中添加数据项.添加的方法如下.
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">
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 对象请参见:http://msdn2.microsoft.com/en-us/library/aew9yb99.aspx
更多关于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函数修改如下:

1

static 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.

好了,我们来测试一下我们的成果.



好了,你是否也成功了呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: