网页(浏览器)调用本地exe应用软件
通过网页调用本地exe软件,比如QQ或者百度网盘等,如果你机器本地已经有exe了,在网页上会直接去把你机器本地的exe给调起来。
1. 背景
为什么要学习网页调用本地exe?因为项目有一个需求,就是通过页面的按钮,点击调用本地的GUWP(exe软件),使其可以直接登录和打开。
而exe应用软件,它只能通过cmd进行操作和数据的传递。
2. 通过网络协议进行和exe通信
通过注册表reg文件,将网络协议(guwp://....)注入到注册表中,通过url的命令,直接启动本地exe软件。比如QQ或者百度网盘等,如果你机器本地已经有exe了,在网页上会直接去把你机器本地的exe给调起来。
2.1. exe软件
exe软件代码(需要pyrthom依赖)【guwp.exe文件放在附录】
import sys
from tkinter import messagebox
def 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. 素材来源
更多推荐
所有评论(0)