在Chrome浏览器中点击连接,打开IE浏览器,跳转到指定页面并传递参数

需求:

在Chrome浏览器中点击连接,打开IE浏览器,跳转到指定页面并传递参数

shell

过程:
一些应用软件能够经过点击URL连接启动并执行操做(例如迅雷),这是如何作到的呢?
主要是经过修改注册表,注册URL Protocol。
 
阶段一:点击连接,打开IE浏览器,并传递单个参数
 
新建 alert.reg
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\alert]
@="URL: Alert Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\alert\DefaultIcon]
@="iexplore.exe,1"

[HKEY_CLASSES_ROOT\alert\shell]

[HKEY_CLASSES_ROOT\alert\shell\open]

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@=" cmd /c set m=%1 & call set m=%%m:alert:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"

 

注释:
set m=%1(%1为传递过来的参数,将其赋给变量m)
set m=%%m:alert:=%% (将前缀alert: 清除)
"C:\\Program Files\\InternetExplorer\\iexplore.exe" %%m%% (打开IE 浏览器并跳转到指定页面)

 

测试连接:
<a href="alert://www.baidu.com?a=1" />test

 

运行效果:
 

 

打开IE浏览器并传递参数a成功!

 

阶段二:传递多个参数
测试连接:
<a href="alert://www.baidu.com?a=1&b=2" />test

运行效果:
 

参数b传递失败


修改alert.reg浏览器

[HKEY_CLASSES_ROOT\alert\shell\open\command]@="cmd /c set m=%1 & echo 1的值:%1 & call echo m的值:%%m%% & call set m=%%m:alert:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%% & exit"


运行效果测试

 
 
缘由分析:
set m=%1,此处%1会直接替换成alert://www.baidu.com?a=1&b=2,&符号将之分为两个命令,m=alert://www.baidu.com?a=1b=2

看来特殊符号&是没法直接传递了,因而想到了用自定义的分隔字符串separator来替代&符号,并在传递给IE前,将其替换回&符号。

修改alert.regspa

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:alert:=%% & call set m=\"%%m:separator=&%%\" & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"


测试连接:ci

<a href="alert://www.baidu.com?a=1separatorb=2" />test


运行效果:字符串

 


参数b传递成功!

本觉得能够功成身退了,却发现个诡异的现象。
第一次点击测试连接OK,不关闭IE的状况下再次点击连接,新弹出的IE地址有误,效果以下:cmd

 

地址栏变为了:http://%22//www.baidu.com/?a=1&b=2%20%20"

修改alert.regit

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:alert:=%% & call echo 第一次替换:%%m%% & call set m=\"%%m:separator=&%%\" & call echo 第二次替换:%%m%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"


运行效果:io

 


缘由分析:
执行m=\"%%m:separator=&%%\"后,m的值变为了"//www.baidu.com/?a=1&b=2  "
看来问题出在双引号上,但由于包含特殊字符&,此处必需使用双引号。
尝试各类写法未果,后经培高人指点,将具体的操做写到bat文件中,在此处调用该bat。


C:\Program Files\WisoftAlert目录下新建alert.battable

@echo off
set m=%m:alert:=%
set m="%m:separator=&%"
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit


修改alert.reg

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & \"C:\\Program Files\\WisoftAlert\\alert.bat\" %%m%% & exit"


屡次点击测试连接均成功!(效果图略)

阶段三:方便用户操做
新建runreg.bat,自动注册协议

REGEDIT /S alert.reg


经过WinRAR将alert.regalert.batrunreg.bat打包成exe文件

 
 
解压路径需与alert.reg中一致 

解压后自动运行runreg.bat,写入注册表信息 

静默执行

阶段四:连接中直接使用&符号
修改alert.reg,将参数%1用双引号引发来

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="\"C:\\Program Files\\WisoftAlert\\alert.bat\" \"%1\""


修改alert.bat

@echo off
set m=%1%
set m=%m:alert:=%
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit


测试连接:

<a href="alert://www.baidu.com?a=1&b=2" />test

测试成功!

相关文章
相关标签/搜索