url链接打开本地应用(测试通过)
基于windows!!
类比mailto://XXXX
主要参考: https://www.cnblogs.com/snow365/p/6428212.html
应用
1、在网页上本地办公
网页应用越来越方便,基于MFC等可视界面的应用越来越乏力。需求:在网页上打开一个本地的文件
2、word online 提供了一个在线的API,不过本地文件需要做穿透,小米球穿透了解一下。
“https://view.officeapps.live.com/op/view.aspx?src=”的后面拼上你的服务器word文件地址;
不过当文件比较大的时候,经常会打不开,而且对网络要求比较高
3、文件在cmdline中打开的方式一般是: "XXX.exe 文件路径+文件名”
操作
1、打通url链接与指定处理程序(.bat、.exe 都行)进行关联以及传参(文件路径+文件名)

打开注册表编辑器,在 HKEY_CLASSES_ROOT路径下建立上图所示的东东。
也可以建立一个.reg文件,自动添加一些东西。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\share]
@="URL:Share Protocol"
"URL Protocol"="C:\\cmd批处理\\share.bat"
[HKEY_CLASSES_ROOT\share\DefaultIcon]
@="C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\WINWORD.EXE,1"
[HKEY_CLASSES_ROOT\share\shell]
@="open"
[HKEY_CLASSES_ROOT\share\shell\open]
@="open"
[HKEY_CLASSES_ROOT\share\shell\open\command]
@="C:\\cmd批处理\\urlfileopen.exe %1"
- 问题1,share按理说可以换成其他自定义的string,我试了一个urlfileopen的字符串,未成功!
- 问题2,defaultIcon的值一定是 'XXX.exe,1' ,至于其他的,我也没试
- 问题3,command的值需要对应于自己的批处理程序, %1 是形参接受
- 问题4,可能是我的reg文件写的不对,有些值没添加上去,比着上面那个图片添加即可
2、批处理程序的编写
import sys #引入模块 import os
from urllib.parse import unquote
import urllib str = sys.argv[1]
exePath={'word':r'C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE',
'ppt':r'C:\Program Files (x86)\Microsoft Office\root\Office16\POWERPNT.EXE',
'excel':r'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE' ,
'rar':r'C:\Program Files\2345Soft\HaoZip\HaoZip.exe',
'txt':'notepad',
'pdf':r'C:\Program Files (x86)\2345Soft\2345Pic\2345PdfReader.exe'
}
# os.system('start')
print(str)
str=unquote(str)
#str=share://word?XXX
# 注意链接传过来 ?-》/? 多一个字符
str=str[8:]
print(str)
if str[:4]=="word":
print(str[5:])
os.system('start "'+exePath['word']+'" "'+str[6:]+'"')
elif str[:3]=="ppt":
os.system('start "'+exePath['ppt']+'" "'+str[5:]+'"')
elif str[:5] == "excel":
os.system('start "' + exePath['excel'] + '" "' + str[7:] + '"')
elif str[:3]=="rar":
os.system('start "'+exePath['rar']+'" "'+str[5:]+'"')
elif str[:3]=="txt":
os.system('start "'+exePath['txt']+'" "'+str[5:]+'"')
elif str[:3]=="pdf":
os.system('start "'+exePath['pdf']+'" "'+str[5:]+'"')
#转exe https://blog.csdn.net/yufen9987/article/details/73865281/
# pyinstaller -F d:\python\login.py
最后使用pyinstaller -F XXX.py生成.exe文件。
这里需要说明两点:
- 问题1:前端的a标签的href="share://word?XXX" ,其中XXX是本地路径加文件名
- 问题2:浏览器会对url链接进行encode, "?"前面会加一个‘/’(解码后,使用chrome浏览器),所以os.system('start "'+exePath['pdf']+'" "'+str[5:]+'"')中,str切片后移一个。
- 问题3:本来实现可以不用这么麻烦,又python又exe的,其实一个.bat文件即可。由于水平有限,不会使用bat对url进行解码(简单的编码转换)。第一个链接中给了一个例子了,但没有对url进行解码
ECHO OFF REM 接收URI地址(share://ppt?C:\Users\liushaofeng\Desktop\PluggableProtocol.pptx)
SET PROTOCOL_ADDRESS=%1 REM 接收到文件类型和文件地址(ppt?C:\Users\liushaofeng\Desktop\PluggableProtocol.pptx)
SET FILE_TYPE_PATH=%PROTOCOL_ADDRESS:~8% REM 文件类型为ppt时,截取文件路径,并传递给word
IF %FILE_TYPE_PATH:~0,3%==ppt (
REM 启动本地word程序,并传入文件路径地址
ECHO %FILE_TYPE_PATH:~4%
start powerpnt %FILE_TYPE_PATH:~4%
) REM 其他文件类型,可以模仿着往下写 EXIT
3、前端链接
前端的a标签的href="share://word?XXX" ,其中XXX是本地路径加文件名
url链接打开本地应用(测试通过)的更多相关文章
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
为了实现这个功能可折腾了我好久,先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功.) 点击浏览器中的URL链接,启动特定的App. 首先做 ...
- QQ网页链接打开本地QQ.exe原理
一.观察现象 QQ推广上有相关文档 http://shang.qq.com/v3/widget.html 新建一个html,点击链接就会启动本地QQ. <html> <body> ...
- androidandroid中的通过网页链接打开本地app
http://blog.csdn.net/zjlovety/article/details/54847980 <html> <head> <meta http-equiv ...
- 微信中通过页面(H5)直接打开本地app的解决方案
简述 微信中通过页面直接打开app分为安卓版和IOS版,两个的实现方式是完全不同的. 安卓版实现:使用腾讯的应用宝,只要配置了“微下载”之后,打开链接腾讯会帮你判断本地是否已经安装了app,如果本地安 ...
- 给你的移动网站加点料:推荐下载App,如果本地安装则直接打开本地App(Android/IOS)
纵观现在每家移动网站,打开首页的时候,都有各种各样的形式来提示你下载自身的移动App(Android/IOS),这是做移动客户端产品的一个很好地引流的手段.当然各家引流下载的交互和视觉各不相同,有的是 ...
- 推荐下载App,如果本地安装则直接打开本地App(Android/IOS)
推荐下载App,如果本地安装则直接打开本地App(Android/IOS) - 纵观现在每家移动网站,打开首页的时候,都有各种各样的形式来提示你下载自身的移动App(Android/IOS),这是做移 ...
- iOS 打开本地 其他应用程序(URL Types)
iOS 打开本地其他应用程序(URL Types) /*前言废话:Xcode是神奇的,是我所见到的编译器中最为神奇的,如:它可以同时运行两个甚至更多Project到我们模拟器上,可以同时使用一个模拟器 ...
- 【Electron】Electron开发入门(七):打开本地文件或者网页链接 and webview里操纵electron api
1.打开本地文件或者网页链接 // 打开系统本地文件 const {shell} = require('electron'); // Open a local file in the default ...
- C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序
本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...
随机推荐
- HTML5学习笔记(一):HTML5基本概念
1.HTML的发展历程 HTML(1994年,W3C成立) HTML2(1995年) HTML3(1996年) HTML4.0(1997年) HTML4.01(1999年)——HTML5(2008年: ...
- 解决局域网内无法IP访问IIS已发布的网站
在IIS上发布的网站,本地可以访问,但是局域网内其他电脑却访问不了,原来是防火墙的问题,关闭它就可以访问了. 上面是我的简单操作 后来又百度了一下,发现有个更详细的操作:http://jingyan. ...
- (转载)项目实战工具类(一):PhoneUtil(手机信息相关)
项目实战工具类(一):PhoneUtil(手机信息相关) 可以使用的功能: 1.获取手机系统版本号 2.获取手机型号 3.获取手机宽度 4.获取手机高度 5.获取手机imei串号 ,GSM手机的 ...
- 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找
题目: 这题要求大于0的最小字段和,常规O(n)求最大字段和的方法肯定是没法解的. 我的解法是:用sum[i]存前i项的和,也就是前缀和. 这题就变成了求sum[j]-sum[i]的大于0的最小值( ...
- hiho 171周 - 水题,并查集
题目链接 题目描述: 输入4 alice 2 alice@hihocoder.com alice@gmail.com bob 1 bob@qq.com alicebest 2 alice@gmail. ...
- angular.js学习-ng-grid
ng-grid是基于AngularJS和JQuery的富表格控件,由AngularUI Team领衔开发,到目前为止已有2354次Commit,1076个Fork. AngualrUI:http:/ ...
- python的数据类型转换
#编码:#py3中只有2种数据类型:str , bytes# str: unicode形式# bytes: 16进制 (更底层) 有utf8,gbk,gb2312 等等类型 #s='hi 范' # 编 ...
- js 将数组中的每一项安装奇偶重新组合成一个数组对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 在学校机房联想硬盘保护下安装Linux,并配置锐捷客户端
最近几天一直在机房里刷题,空调开着非常舒服.但是机房电脑里全是windows系统,不太好用,挺膈应人的. 一直打算换个系统,刚才终于搞定网络问题了,以后用电脑就可以爽到了. 联想硬盘保护系统下u盘安装 ...
- [洛谷P1580]yyy loves Easter_Egg I
题目大意:很多人@一个人,如果那个人忍不住说话了,就轰炸成功,如果那个人没说话或者别的人没有@他或@很多个人,则轰炸失败.(具体见原题) 解题思路:字符串处理,好好用sscanf即可(细节见代码). ...