最近项目遇到一个需求,需要通过网页调用本地应用程序。
找到2个方法,记录一下。
第一个方法,使用WScript.Shell
WScript.Shell对象的Run方法可以直接运行文件(包括协议文件),会启动相关联的程序打开该文件(没有关联则出错)。
比如:objShell.run("D:\\aa.docx");
Run方法可以直接运行位于path环境变量目录中的程序,还能运行在注册表App Paths中设置的程序“别名”.
比如:objShell.run("notepad.exe");
第二个方法,利用URL Protocol
利用自定义URL Protocol来调用应用程序。
(参考百度文库:http://wenku.baidu.com/view/df42b5e1856a561252d36f68.html)
浏览器在解析到自定义URL Protocol之后,会寻找注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数。
我写个一个例子,给notepad++定义一个URL Protocol(Webshell),然后调用它
1)自动进行reg注册表注册
此处参考百度文库中的说明,利用记事本直接构造一个reg文件,实现上述自动注册的功能:
################################添加自定义URL Protocol##################################
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Webshell]
"URL Protocol"="D:\\Notepad++\\notepad++.exe"
@="WebshellProtocol"
[HKEY_CLASSES_ROOT\Webshell\DefaultIcon]
@=" d:\\Notepad++\\notepad++.exe,1"
[HKEY_CLASSES_ROOT\Webshell\shell]
[HKEY_CLASSES_ROOT\Webshell\shell\open]
[HKEY_CLASSES_ROOT\Webshell\shell\open\command]
@="d:\\Notepad++\\notepad++.exe \"%1\""
#####################################################################################
在#内的为自定义URL Protocol的注册表信息,对每一行说明一下:
第一行是注册表工具的版本信息,可以自己改一改,或者自己导入任意一个注册信息,把这一行复制过来就行了;
第二行中的Webshell就是在HKEY_CLASSES_ROOT下面添加一个Webshell树,其中Webshell的名称就对应着自定义URL Protocol的名称,在web中调用的时候需要这个名称;
第三行中的"D:\\Notepad++\\notepad++.exe"是指定应用程序的路径,注意只能是exe的程序;
第四行是协议的名称,可以是任意字符串,后面不会用到;
第五行表示在Webshell中再加一个分支,照抄,不用管;
第六行中的d:\\Notepad++\\notepad++.exe也是对应的程序路径,后面的1照抄;
第七行同第四行
第八行同第四行;
第九行同第四行;
第十行也是将路径换成自己的程序路径即可,其中%1表示到参数,参数可以在你的程序notepad++.exe中解析得到。
将#之间的内容复制到一个txt文档中,修改后缀名为.reg,双击该文件即可直接导入到注册表中。如下图:
2)构造网页测试代码
然后构造一个最简单的测试页面进行调用测试,测试页面代码仅为一行,如下:
<html>
<a href="Webshell:hello">Wheshell</a>
</html>
找到2个方法,记录一下。
第一个方法,使用WScript.Shell
<html>
<head>
<title>Test Page</title>
<script type="text/javascript" language="jscript">
function Run(strPath)
{
var objShell = new ActiveXObject("wscript.shell");
objShell.run("notepad.exe") ;
//objShell.run("notepad d:/aa.docx");
// objShell.run("D:\\aa.docx");
objShell = null;
}
</script>
</head>
<body>
<BUTTON class=button οnclick="Run()" style="right:0; bottom:0;">确定</BUTTON>
</body>
</html>
WScript.Shell对象的Run方法可以直接运行文件(包括协议文件),会启动相关联的程序打开该文件(没有关联则出错)。
比如:objShell.run("D:\\aa.docx");
Run方法可以直接运行位于path环境变量目录中的程序,还能运行在注册表App Paths中设置的程序“别名”.
比如:objShell.run("notepad.exe");
第二个方法,利用URL Protocol
利用自定义URL Protocol来调用应用程序。
(参考百度文库:http://wenku.baidu.com/view/df42b5e1856a561252d36f68.html)
浏览器在解析到自定义URL Protocol之后,会寻找注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数。
我写个一个例子,给notepad++定义一个URL Protocol(Webshell),然后调用它
1)自动进行reg注册表注册
此处参考百度文库中的说明,利用记事本直接构造一个reg文件,实现上述自动注册的功能:
################################添加自定义URL Protocol##################################
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Webshell]
"URL Protocol"="D:\\Notepad++\\notepad++.exe"
@="WebshellProtocol"
[HKEY_CLASSES_ROOT\Webshell\DefaultIcon]
@=" d:\\Notepad++\\notepad++.exe,1"
[HKEY_CLASSES_ROOT\Webshell\shell]
[HKEY_CLASSES_ROOT\Webshell\shell\open]
[HKEY_CLASSES_ROOT\Webshell\shell\open\command]
@="d:\\Notepad++\\notepad++.exe \"%1\""
#####################################################################################
在#内的为自定义URL Protocol的注册表信息,对每一行说明一下:
第一行是注册表工具的版本信息,可以自己改一改,或者自己导入任意一个注册信息,把这一行复制过来就行了;
第二行中的Webshell就是在HKEY_CLASSES_ROOT下面添加一个Webshell树,其中Webshell的名称就对应着自定义URL Protocol的名称,在web中调用的时候需要这个名称;
第三行中的"D:\\Notepad++\\notepad++.exe"是指定应用程序的路径,注意只能是exe的程序;
第四行是协议的名称,可以是任意字符串,后面不会用到;
第五行表示在Webshell中再加一个分支,照抄,不用管;
第六行中的d:\\Notepad++\\notepad++.exe也是对应的程序路径,后面的1照抄;
第七行同第四行
第八行同第四行;
第九行同第四行;
第十行也是将路径换成自己的程序路径即可,其中%1表示到参数,参数可以在你的程序notepad++.exe中解析得到。
将#之间的内容复制到一个txt文档中,修改后缀名为.reg,双击该文件即可直接导入到注册表中。如下图:
2)构造网页测试代码
然后构造一个最简单的测试页面进行调用测试,测试页面代码仅为一行,如下:
<html>
<a href="Webshell:hello">Wheshell</a>
</html>
实际运行的演示效果如下所示: