有时候我们想要实现一个功能,就是在HTML页面点击一个链接就能调用打开本地可执行文件。就像腾讯QQ、迅雷这种。

而实现这种功能其实也很简单,就是需要我们添加修改注册表,实现自定义URL Protocol协议。

自定义URL Protocol 协议
一些应用软件可以在浏览器中点击一个url后自动启动,并执行操作。

1.  win+r打开注册表,输入regedit进入注册表

2. 在注册表 左边最上面HKEY_CLASSES_ROOT那个树右键新建——项。该项的名称自己命名,其实该名称也是协议的名称,我们调用的时候就是根据该协议调用的,而我这里随便起了一个:ZZO。

3. 然后在该项中右键->新建->字符串值,创建一个URL Protocol的值,其中数据默认为空。

4. 然后在ZZO下新建->项,名字为DefaultIcon

5. 在ZZO下新建->项,名称为shell。并在shell下新建名为open的项。然后在open下新建名为command的项

6. 然后分别修改DefaultIcon 和 command 的值为要调用的程序完整路径.

比如我这里要调用的是QQ,完整路径为:D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe

7. 然后我们在html页面添加一个a标签

<a href="Zzo://">open</a>

8. 点击页面按钮

通过网站调用可执行程序,主要是修改注册表,注册 URL Protocol 协议。
注意上面 command 项的值可以为 C:\Program Files (x86)\Qiaoker\updater.exe "%1" ,这个"%1"是传递给 updater.exe的参数。

加了后使用是我们就可以传参数了,

<a href="Uaiqiy://cid:110&username:mjq">

方式二:使用js调起客户端

除了上面那种方式,我们还可以通过调用js函数实现客户端exe程序的调用,但是这种方式局限性很大,目前只支持IE浏览器。

代码如下:

function execProgram() {
var exepath = "D:\\Program Files (x86)\\Tencent\\QQMusic\\QQMusic.exe"
var ws = new ActiveXObject("WScript.Shell");
ws.Exec(exepath);
}

如果想要调用bat脚本或者vbs程序,可以将ActiveXObject 的 Exec()方法替换成Run() 方法。

function execProgram() {
var exepath = "C:\\Users\\LeBron\\Desktop\\新建.vbs"
var ws = new ActiveXObject("WScript.Shell");
ws.Run(exepath);
}

---------------------
作者:lebron3v
来源:CSDN
原文:https://blog.csdn.net/lebron3v/article/details/80736744
版权声明:本文为博主原创文章,转载请附上博文链接!

实现HTML调用打开本地软件文件的更多相关文章

  1. 打开本地STL文件并创建webgl使用的geometry

    需求 打开本地STL文件 一个独立基于webgl的viewer,会被别的网站重用 将打开文件的数据传输给viewer,并且在文件加载的时候显示进度条 解决方案 #1可以使用传统的html5 api来打 ...

  2. js 判断是否可以打开本地软件

    js判断时候可以打开本地的软件或者插件 点击一个按钮,打开本地的软件,比如问题反馈,需要调起本地的邮箱,填入一些信息. 这个功能<a>标签有提供支持,但是如果本地没有安装邮箱,则无法打开, ...

  3. JS 通过注册表调用启动本地软件

    (关键点:所有软件安装的注册表路径是不会变化的,这个注册表路径需沟通软件商家获取或者通过自己安装在注册表中查找得到) // 调用 注册表编辑类 方法 function run_jxpgj(){//进项 ...

  4. 【原】使用SQLite打开本地*.db文件

    1.下载安装文件:官网下载地址:http://www.sqlite.org/download.html32位安装包:http://www.sqlite.org/2016/sqlite-tools-wi ...

  5. 【WPF】 打开本地的文件或者文件夹

    问题描述: 我做的程序中需要添加帮助文档,我将文档生成了CHM格式,在用户点击帮助按钮时候 弹出帮助文档. 实现方法: System.Diagnostics.Process.Start(AppDoma ...

  6. 谷歌浏览器不能打开本地HTML文件

    打开浏览器右上角菜单——>更多工具——>扩展程序——>将Axure RP Extension For Chrome 0.62.crx文件拖入——>成功后,勾选相关选项 文件的下 ...

  7. MyWebViewDemo【封装Webview常用配置和选择文件、打开相机、录音、打开本地相册的用法】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装webview的常用配置和选择文件.打开相机.录音.打开本地相册的用法.[如果想要使用简单的预览功能,可以参考<MyBri ...

  8. Electron 调用系统Office软件

    通过打开本地空白文件的方式从而打开Office办公软件 const shell = require('electron').shell; const path = require('path'); s ...

  9. python解析本地HTML文件

    Python使用爬虫技术时,每运行一次,本地都会访问一次主机.为避免完成程序前调试时多次访问主机增加主机负荷,我们可以在编写程序前将网页源代码存在本地,调试时访问本地文件即可.现在我来分享一下爬取资料 ...

随机推荐

  1. Python3——根据m3u8下载视频(下)之requests

    下半场ING,好吧,本来准备明天写的(拖延真快乐.gif),请然而,,,早上八点多跑公司加班(看书+学习)去,发现大门上挂着一把大锁,我只想说门禁是拿来看的嘛,加啥破锁o(╥﹏╥)o,严重打击了好员工 ...

  2. flask POOL,websocket握手

    一.POOL Pool就是为了多线程访问数据库,减少数据库压力 回顾pymysql import pymysql #建立连接 mysql_conn = pymysql.connect(host=&qu ...

  3. day31_8.12并发编程二线程

    一.进程间的通信 在进程中,可以通过Queue队列进行通信,队列有两个特点: 1.先进先出.(先来的数据先被取出) 2.管道式存取.(数据取出一次后就不会在有了) 在python中有以下方法来操作数据 ...

  4. JAVA并发-Condition

    简介 在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait().notify()系列方法可以实现等待/通知模式.在Java SE5后,Java提供了Lock接口, ...

  5. VIJOS-P1421 更换轮胎

    JDOJ 1506: VIJOS-P1421 更换轮胎 https://neooj.com/oldoj/problem.php?id=1506 Description 经过数周的期待,比赛终于正式开始 ...

  6. 为什么说要搞定微服务架构,先搞定RPC框架

    今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢? 一.需求缘起 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队 ...

  7. 阿里邮箱地址,smpt

    企业邮箱的POP3.SMTP.IMAP地址是什么? 企业邮箱POP.SMTP.IMAP地址列表如下: (阿里云邮箱web端通用访问地址:https://qiye.aliyun.com/),客户端推荐以 ...

  8. bash shell——sum

    #!/bin/bash # sum.sh # 获取随机数量的参数,相加并打印结果 # total= # # $# 表示参数的数量 # for 循环获取每个参数 # ${!i} 表示返回第i个参数 # ...

  9. vijos2051 SDOI2019 快速查询

    题目链接 吐槽 竟然让\(nlog\)的做法卡过去了.. 思路 因为\(1 \le q \le 10^5\),所以可以先对每个标准操作,所操作的位置进行重标号.这样所有的下标都是在\(10^5\)以内 ...

  10. [LeetCode] 37. Sudoku Solver 求解数独

    Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must satisfy  ...