在网页如何调用客户端的可执行文件

最近,群里在讨论如何从网页中打开一个exe文件。在群里面说了下思路,但总说不清楚,答应写一篇文章出来。这几天事情挺多,一直没时间写,让阿超同学久等了。

基于浏览器的应用,表现力始终不够丰富,我们常常会想,在一个网页中,点一下某个链接,能够直接调用安装好的可执行程序有多好啊。按照微软的推荐,应该是通过ActiveX,把可执行程序嵌入到网页中,例如flash的ActiveX。这样,我们就要购买ActiveX的签名,不通过签名的东西,在IE6中是无法加载的,为一个小项目购买ActiveX的签名,代价太昂贵了。另外,很多时候还要考虑如果用户突然关闭了浏览器该怎么办。这对播放个flash、歌曲之类的没多大影响,但是很多时候,不能在关闭前清扫战场,带来的后果是灾难性的。通常,在企业应用中,我们总是通过IE直接调用exe。
最早的时候,从网页调用一个EXE是很简单的事情,一段javascript就可以了。但是,自从IE6开始,微软就不再允许这种“极不安全的行为”。这也是有道理的。没事就给你来个“format d:/q”,即使不这么恶劣,动不动就给你弹几百个notebook,也确实够恐怖的。浏览器不应该与操作系统有太多不必要的关联。
拿javascript在IE6测试之后,我几乎放弃了直接调用exe的想法,直到有一天,看到了腾讯的实现方法。
腾讯有一个在网页上面显示QQ状态的东西,点一下就能弹出一个对话框跟该QQ用户聊天,而不会有任何警告。好神奇啊。注册表里面研究了一天,终于明白了怎么回事。

在windows中,注册表中包含各种协议(http,ftp,telnet等)的信息,包含了默认打开方式的参数。试一下,从IE的地址栏中输入telnet://www.163.com,出现什么了?弹出了一个命令行窗口,开始进行telnet操作。IE居然能完成这个,那么为什么就不能完成“telnet1://参数” 呢?

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS]
@="SIMS"
"URL Protocol"="C://PROGRA~1//SIMS//trans.exe %l"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/DefaultIcon]
@="%SystemRoot%//system32//url.dll,0"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell]

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell/open]

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell/open/command]
@="C://PROGRA~1//SIMS//trans.exe %l"

把这个东西导入注册表,那么我们在浏览器中输入sims://1022,那么就会自动调用c:/program files/sims/trans.exe(当然了,你得确实有这个文件),并把1022这个参数传给该exe。这个操作被认为是安全的,不会有任何的限制。
到这里,思路就清晰了,我们的安装程序中,在注册表中建个协议,例如上面的SIMS,再把要执行的exe的路径信息写入,在网页直接一个超链接,协议://参数就可以了。exe文件接受这个参数,进行相应的处理。搞定。

记住,协议://后面的所有字符串被看做是一个参数。那么,exe文件永远只有两个参数,参数0是它的完整执行路径,参数1就是网页传过来的字符串

在网页如何调用客户端的可执行文件

时间: 2024-10-13 12:55:45

在网页如何调用客户端的可执行文件的相关文章

asp.net网页调用客户端程序

================================第一步:网注册表中(HKEY_CLASSES_ROOT)添加项 ================================第二步:在网页上写上标签调用 <a href="xishui://hello">zhangdi://hello</a> ================================显示效果:会弹出hello asp.net网页调用客户端程序,布布扣,bubuko.com

通过网页调起客户端程序

果冻栋吖原创内容:未经允许禁止转载~ 怎么像百度云那样通过网页调起客户端程序? 先说下我的经历,愚蠢的我直接同C#CS程序调起本地程序的方法,写在了网页上,显然,这样是不对的,这样调起的是服务器的程序,并不是客户端程序. 那么,具体是怎么操作的呢? 代码有很多不足之处,肯定会有更好的办法,如果您有什么建议,请联系我QQ:1772829123或者评论.请各位大佬不吝赐教! 网页的代码挺简单, MyApp: 是要调起的程序,需要加注册表信息 aadmin,123321是传递的参数,实际是用字符串传递

WEB程序调用客户端程序

最近一个项目中要点击WEB页面上的链接启动自己编写的程序,而且还要接收参数,google了1.5小时,终于初步试验通过了. 尝试google了:web send message windows form, bs call cs program, custom protocol...多个关键字组合,发现这种技术叫 registered URL protocol,在这篇文章里介绍得比较详细: http://msdn.microsoft.com/en-us/library/aa767914(v=vs.

【iOS】网页中调用JS与JS注入

很多应用为了节约成本,做出同时在Android与iOS上都能使用的界面,这时就要使用WebView来做.Android和IOS上都有WebView,做起来很省事.当然这时就要考虑如何在Android或iOS中实现与网页的交互.对iOS而言,包括如何在网页中调用OC,以及如何在OC中对网页进行操作. 先将网页弄到iOS项目中: 网页内容如下, 仅供测试: <html> <head> <meta xmlns="http://www.w3.org/1999/xhtml&q

TML5如何在移动网页端调用手机图片或者camera

TML5如何在移动网页端调用手机图片或者camera可以参考这篇文章: 如果你开始基于iOS系统(ios6 above) 的web应用,可以考虑这段代码: 点击按钮,会调用你的摄像头相册 附源码文件: <input type="file" capture="camera" accept="image/*" id="cameraInput" name="cameraInput">

java之如何实现调用启动一个可执行文件,exe

1 /* 2 * 运行可执行文件:.exe 3 * 当要执行一个本地机器上的可执行文件时, 4 * 可以使用java.lang包中的Runtime类,首先使用Runtime类,首先 5 * 使用Runtime类声明一个对象 6 *{ 7 * Runtime sc =Runtime.getRuntime(); 8 * sc可以调用exec(String command) 方法打开本地湖区上的可执行文件或执行一个操作. 9 * } 10 */ 11 12 13 /* 14 * 不妨举列: 15 *

js网页中调用本地应用程序

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Test ActiveXObject</title> <script> function Run(command) { windo

谷歌浏览器根据html网页启动邮件客户端Outlook

网页html代码中,可以通过<a href="mailto:xxxx">来设置电子邮箱链接. 在网页中,点击该链接,会启动一个默认的邮件客户端,比如windows的outlook. 当然也可以设置浏览器去打开其他的邮件客户端. 那么,浏览器是怎么知道这个邮件客户端在哪里的呢?下面以windows上的谷歌浏览器为例. 在点击邮件链接后,会产生两个重要的操作.第一个操作是读注册表([图片太长被压缩,请右键"在新标签页中打开图片"]): 可见,邮件客户端可执行

网页里面调用OCX控件的一般方法

在HTML页面中使用ActiveX控件包含三个基本操作:将控件放入HTML中:将该控件下载给用户:在用户机器上安装该控件.如果只是针对IE用户,在HTML中插入ActiveX控件就比较简单:如果同时兼顾IE和Netscape用户,则要做更多工作.大家知道,HTML文件由文本和各种标志 (tags)组成,ActiveX 控件对于IE在HTML中的标志是<OBJECT>,该标记有几个重要的参数特性,它们是: 1.ID:为控件提供一个标识名称,为HTML代码提供一种访问该控件的方式. 就是说在网页内