1. 背景

为什么要学习网页调用本地exe?因为项目有一个需求,就是通过页面的按钮,点击调用本地的GUWP(exe软件),使其可以直接登录和打开。

而exe应用软件,它只能通过cmd进行操作和数据的传递。

2. 通过网络协议进行和exe通信

通过注册表reg文件,将网络协议(guwp://....)注入到注册表中,通过url的命令,直接启动本地exe软件。比如QQ或者百度网盘等,如果你机器本地已经有exe了,在网页上会直接去把你机器本地的exe给调起来。

2.1. exe软件

exe软件代码(需要pyrthom依赖)【guwp.exe文件放在附录】

import sysfrom tkinter import messageboxdef mmain(args:list):if len(args) > 0:messagebox.showinfo("提示", "您的参数为:{}".format(args))else:messagebox.showinfo("提示", "您一个参数都没有。。。")if __name__ == '__main__':# print(sys.argv)mmain(sys.argv[1:])

将python代码打包成exe文件

打开cmd,输入:pip install pyinstaller,安装打包软件。

进入存放guwp.py的文件夹下(D:\test),通过地址栏输入:cmd

在guwp.py的文件下打开cmd,输入:pyinstaller -F "guwp.py"

打包好exe软件,会在dist文件夹下(D:\test\dist)生成exe文件。

复制到测试文件下(D:\guwp)

打开cmd,输入:D:\guwp\guwp.exe 11111111111111111

exe软件执行成功,会出现提示框,并且展示输入的参数内容。

2.2. reg注册文件

reg注册文件代码【guwp.reg文件放在附录】

若要执行其他exe文件,只需修改上面的本地路径(D:\\guwp\\guwp.exe)

若想接收参数,在最后一行的格式定义上加上“%1”,这个字符串代表可以接收参数。

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\guwp]
"URL Protocol"="D:\\guwp\\guwp.exe"
@="guwProtocol"
[HKEY_CLASSES_ROOT\guwp\DefaultIcon]
@="D:\\guwp\\guwp.exe"
[HKEY_CLASSES_ROOT\guwp\shell]
[HKEY_CLASSES_ROOT\guwp\shell\open]
[HKEY_CLASSES_ROOT\guwp\shell\open\command]
@="\"D:\\guwp\\guwp.exe\" %1"

若想不接收参数,可直接不写

@="\"D:\\guwp\\guwp.exe\"

网络协议的生效只和注册表的路径名称有关!比如下面路径(HKEY_CLASSES_ROOT\guwp1)

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\guwp1]
"URL Protocol"="D:\\guwp\\guwp.exe"
@="guwProtocol"
[HKEY_CLASSES_ROOT\guwp1\DefaultIcon]
@="D:\\guwp\\guwp.exe"
[HKEY_CLASSES_ROOT\guwp1\shell]
[HKEY_CLASSES_ROOT\guwp1\shell\open]
[HKEY_CLASSES_ROOT\guwp1\shell\open\command]
@="\"D:\\guwp\\guwp.exe\" %1"

点击guwp.reg将URL Protocl注入注册表中

检查注册表中是否存在guwp的这个网络协议,打开win+R,输入:regedit,打开注册表编辑器。

测试guwp协议是否注册成功,在URL栏输入:guwp://111111111111

回车enter,就会出现要打开guwp.exe

就能够调用本地的exe软件,并且将参数传入到exe软件中。

这个通过网络协议的参数传递是带有guwp://格式的,和通过cmd启动exe的参数形式不一样。

3. 前端调用cmd

前端可以通过js代码直接获取本地计算器权限,调用cmd执行代码,这是功能只能在ie浏览器进行,其他浏览器不支持。

JAVAscript执行cmd代码

var  cmd = new ActiveXObject("WScript.Shell");
cmd.run("D:\\guwp\\guwp.exe 11111111111111111");");

执行这段代码,需要打开ie浏览器的权限功能,重新启动ie。

打开ie浏览器的开发工具,进入控制台,输入js代码。

点击运行,会出现执行guwp文件提示。

点击允许,这就是直接执行cmd命名,调用gwup.exe。

注意:这个功能方法虽然可以通过前端调用cmd,执行exe软件,但是有个严重的安全问题,就是网页可以通过cmd获取到你的计算权限,如果他人要是执行文件清除等命令,后果不堪设想。所以一般禁止使用这个功能,使用网络协议调用本地的exe软件,才是正确的方法。

4. 附件

4.1. 代码附带文件

reg注册文件(去掉.txt),exe软件代码(去掉.txt)

【鄙视不支持txt文件上传】

链接:https://pan.baidu.com/s/1xSuObg5qf1_oeEMhwxommQ 
        提取码:vkju

4.2. 素材来源

  1. 浏览器调用本地exe(应用程序)方法--链接
  2. 网页:如何调用本地EXE文件--链接
  3. python中用pyinstaller工具打包exe--链接
  4. JAVAscript怎么执行cmd命令--链接

网页(浏览器)调用本地exe应用软件相关推荐

  1. 浏览器网页链接打开本地exe程序

    浏览器网页超链接打开本地exe程序的方法 一 .加注册表## 新建 aclient.reg 文件,加入以下代码,双击运行aclient.reg,就会将以下信息加到注册表中 需要修改的信息 { acli ...

  2. 浏览器调用exe并从中获取内容的通用解决方案之浏览器和本地exe通信篇

    除了IE支持OCX可以直接在浏览器内部,其他所有现代浏览器都不支持内嵌exe执行并交互返回内容了 采用的是本地HttpListener监听端口,然后前端轮询jsonp的方式实现浏览器和本地exe通信, ...

  3. 浏览器调用本地应用程序

    第一次遇到这个问题是比较蒙的,后来查找资料后逐渐有了思路: IE 浏览器可以使用 ActiveX控件,但会有风险(我并未去验证). 使用URL ,通过将URL协议添加到注册表的方法(我打算采用这种方法 ...

  4. 浏览器打开本地exe

    浏览器打开本地exe程序有很多方法ActiveXObject方法只支持IE,谷歌.火狐等浏览器并不支持此操作. 网上搜了很多资料还有自己加注册表方法的比如: http://blog.csdn.net/ ...

  5. 通过浏览器打开本地exe应用(支持任意浏览器)

    IE浏览器下打开指定路径的EXE文件: function Run(strPath) {//alert(strPath);try {var objShell = new ActiveXObject(&q ...

  6. 在网页中调用本地的应用程序

    在网页中调用本地的应用程序 例子: <script> function exec (command) {     window.oldOnError = window.onerror;   ...

  7. 关于发布后网站调用本地exe的曲线救国之路

    关于发布后网站调用本地exe的曲线救国之路 web调用本地exe-尝试一 普遍方法:使用Process来调用应用程序 优缺点 优点 缺点 web调用本地exe-尝试二 优缺点 优点 缺点 web调用本 ...

  8. AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 wps office, excel ppt

    AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 office   更多主页   下载地址   ​​​​​​​ 能在以及几乎所有支持websock浏览器,包括chro ...

  9. PHP 网页调用本地exe程序实例

    一.需求:在做网站的时候,有些网站网页面需要调用本地的exe程序. 二.方法:利用注册URL Protocol的方式. 代码如下: 1.视图文件里面的代码: <a href="fyex ...

最新文章

  1. 用 Python 实现隐身,我可以
  2. oracle11 区分大小写,修改Oracle11g用户密码不区分大小写
  3. 命令行里给个注释,AI就能自动生成代码
  4. 【控制】《自动控制原理》胡寿松老师-第4章-线性系统的根轨迹法
  5. mysql5.7.21源码安装
  6. 3GPP Release、TSG、RAN等概念介绍
  7. 宁滨院士生前最后一场学术报告
  8. SAS笔记(2) RETAIN语句
  9. 【计算机科学基础】计算机概述
  10. ubuntu mysql 5.7_Ubuntu 16.04 上安装 MySQL 5.7 教程
  11. Java虚拟机最多支持多少个线程?
  12. slam 图像处理 matlab,MATLAB R2020a图像处理和计算机视觉新进展
  13. Linux下dig命令使用
  14. Effective Java 第三版 中文翻译
  15. 深度学习-lecture1李飞飞计算机视觉
  16. html魔方转动效果,简单说 用CSS做一个魔方旋转的效果
  17. linux系统禁用声卡,Ubuntu Linux系统下声卡独占的解决方法
  18. wifi转串口芯片——ESP8266:配置与使用
  19. 分享到QQ、新浪微博、微信代码
  20. EXCEL时间计划顺延,并跳过周末以及法定节假日

热门文章

  1. 一个粗糙的二人贪吃蛇联机版实现
  2. 测试人员如何制定测试策略呢?
  3. Webpack5 教程(3)--处理图片资源
  4. python爆内存list_Python3基础 list del 从内存中删除整个列表
  5. Silvaco二极管、三极管、CMOS的制备
  6. set的常见用法详解
  7. Nonlinear Component Analysis as a Kernel Eigenvalue Problem
  8. try-finally的详解
  9. Arduino实验二十 数码管实验
  10. 附件上传总结-模板文件服务器路径无法识别,aspose的maven无法下载,无法找到jar包问题,打包异常问题