js调用本地exe程序的两种方式小结

 更新时间:2022年11月25日 11:10:07   作者:longzhoufeng  
这篇文章主要介绍了js调用本地exe程序的两种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

js调用本地exe程序

第一种方法:就是 url protocol 的方式来实现

用这种方式实现,任何浏览器都兼容,不会存在只有IE或FIREFOX才行的情况。

都用过QQ,迅雷,电驴,在网页上点击的时候,就会弹出QQ,或者迅雷,电驴的下载界面,用的就是这个原理

在微软的MSDN上也有说明:http://msdn.microsoft.com/en-us/library/aa767914%28v=vs.85%29.aspx

在这里,做一个简单的例子

第一步:先要写入注册表,先注册URL PROTOCOL, 在windows 下就是注册表:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\myprotocol]
@="myprotocol Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\myprotocol\DefaultIcon]
@="C:\\WINDOWS\\NOTEPAD.EXE"

[HKEY_CLASSES_ROOT\myprotocol\shell]
@=""

[HKEY_CLASSES_ROOT\myprotocol\shell\open]
@=""

[HKEY_CLASSES_ROOT\myprotocol\shell\open\command]
@="\"C:\\WINDOWS\\NOTEPAD.EXE\" "

保存内容为 reg文件(myprotocol.reg),然后执行,就加入注册表,注册了这个名字为myprotocol 的协议.

第二步:测试页面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<div>
    <a href="myprotocol://D:\cmt-static\myprotocol.reg" rel="external nofollow" >
        执行可执行文件
    </a>
</div>
</body>
</html>

js利用URL Protocol调用本地exe并传入参数

1.自定义URL Protocol 协议

两种方式

第一种:直接修改注册表

开始 => 运行

HKEY_CLASSES_ROOT

新建项目



第二种:编写注册表信息,执行即可

创建一个文件

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Webshell]
@=“URL:Webshell Protocol Handler”
“URL Protocol”=""
[HKEY_CLASSES_ROOT\Webshell\DefaultIcon]
@=“D:\workspace\test\system\tools\Call_Printer\trunk\code\Printer\Debug\Printer.exe”
[HKEY_CLASSES_ROOT\Webshell\shell]
[HKEY_CLASSES_ROOT\Webshell\shell\open]
[HKEY_CLASSES_ROOT\Webshell\shell\open\command]
@="“D:\workspace\test\system\tools\Call_Printer\trunk\code\Printer\Debug\Printer.exe” “%1"”

这里说明一点

  • 如果上面传递不了参数,即exe程序接收不到参数,将%1改为%L即可
  • 如果要传递多个参数,自定义传入分隔符,传到应用程序自己解析即可。

2.Web端调用方法

3.EXE处理接收到的参数

如果是上图web测试代码,则接收到的数据为:WebPrinter:21/560e7cfde165449fb56a92dede3d0003a958 字符串,之后自己处理即可

4.EXE程序打包

我这里使用inno打包,只需要加上下面这段即可

Inno Setup 写入注册表的代码如下:

[Registry]
Root: HKCR; SubKey: WebPrinter; ValueData: “WebPrinter Protocol”; ValueType: string; Flags: CreateValueIfDoesntExist UninsDeleteKey;
Root: HKCR; SubKey: WebPrinter; ValueName: “URL Protocol”; Flags: CreateValueIfDoesntExist; ValueType: string;
Root: HKCR; SubKey: WebPrinter\DefaultIcon; ValueData: {app}\Printer.exe; Flags: CreateValueIfDoesntExist; ValueType: string;
Root: HKCR; SubKey: WebPrinter\shell\open\command; ValueData: “{app}\Printer.exe “”%L”""; Flags: CreateValueIfDoesntExist; ValueType: string;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • js读取json文件片段中的数据实例

    js读取json文件片段中的数据实例

    下面小编就为大家带来一篇js读取json文件片段中的数据实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • JS实现的车标图片提示效果代码

    JS实现的车标图片提示效果代码

    这篇文章主要介绍了JS实现的车标图片提示效果代码,涉及JavaScript鼠标事件触发页面元素遍历修改的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • js实现使用鼠标拖拽切换图片的方法

    js实现使用鼠标拖拽切换图片的方法

    这篇文章主要介绍了js实现使用鼠标拖拽切换图片的方法,涉及javascript操作图片实现轮播效果的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • JavaScript中的声明提升实例详解

    JavaScript中的声明提升实例详解

    这篇文章主要为大家介绍了JavaScript中的声明提升实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • window.open以post方式将内容提交到新窗口

    window.open以post方式将内容提交到新窗口

    最近在做web项目,碰到需要跨页面传递参数的功能,就是那种需要把当前页面的内容带到新开的子窗体中,以前的做法是传一个id过去,然后在新窗口中去读数据库的内容;比较有意思的是直接通过调用form的submit方法不能触发onsubmit事件,查看了帮助文档,必须手动的触发,否则只能看到页面刷新而没有打开新窗口
    2012-12-12
  • webpack图片转为base64的实现示例

    webpack图片转为base64的实现示例

    在开发过程中,图片转成base64是常有的事,本文主要介绍了webpack图片转为base64的实现示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 微信小程序商品详情页底部弹出框

    微信小程序商品详情页底部弹出框

    这篇文章主要为大家详细介绍了微信小程序商品详情页底部弹出框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • JS中不应该使用箭头函数的四种情况详解

    JS中不应该使用箭头函数的四种情况详解

    箭头函数给我们的工作带来了极大的方便,但是它们有什么缺点呢?我们应该一直使用箭头函数吗?我们应该在哪些场景中停止使用箭头函数?本文就来为大家详细讲讲
    2022-07-07
  • json数据处理技巧(字段带空格、增加字段、排序等等)

    json数据处理技巧(字段带空格、增加字段、排序等等)

    json数据处理技巧例如:正常取值、字段带空格、赋值、增加字段、排序、拷贝、数组添加和删除等,详细请参考本文或许对你有所帮助
    2013-06-06
  • 浅谈JavaScript的push(),pop(),concat()方法

    浅谈JavaScript的push(),pop(),concat()方法

    下面小编就为大家带来一篇浅谈JavaScript的push(),pop(),concat()方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06

最新评论