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

Posted on 2007-06-25 01:23  沧海依粟  阅读(3324)  评论(16编辑  收藏  举报

    今天在CSDN上看到有人在问在 IE 中,如何像迅雷那样,右键点击某个链接,在菜单中打开自定义的应用程序.
    网上 Google 了一下, 找了一些文章,整理了一下,分享下,希望对以后有这样应用的朋友有所帮助.

  1. 首先当然要在右击链接时的显示的菜单中添加数据项.添加的方法如下.
    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. 第二步就是编写脚本,以被调用,然后启动我们想要执行的程序.
    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, 1true); //这里后面的 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放在默认的路径下,所以一直提示路径出错,但是在没有空格的路径时就不会有什么问题.最后才了解到路径要加上引号,呵呵.如果大家在其它地方也遇到这样的问题,如路径中有空格时出错这样的怪问题,不妨给路径前后加上引号试试.
  3. 至此,我们就已经完成了大部门的工作,现在我们来编写一个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.
  4. 好了,我们来测试一下我们的成果.

    好了,你是否也成功了呢?
  • 安全快速不中毒的浏览器:
  • 写博客也能赚钱: