基于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文件,自动添加一些东西。
1 Windows Registry Editor Version 5.00 2 [HKEY_CLASSES_ROOT\share] 3 @="URL:Share Protocol" 4 "URL Protocol"="C:\\cmd批处理\\share.bat" 5 [HKEY_CLASSES_ROOT\share\DefaultIcon] 6 @="C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\WINWORD.EXE,1" 7 [HKEY_CLASSES_ROOT\share\shell] 8 @="open" 9 [HKEY_CLASSES_ROOT\share\shell\open] 10 @="open" 11 [HKEY_CLASSES_ROOT\share\shell\open\command] 12 @="C:\\cmd批处理\\urlfileopen.exe %1"
- 问题1,share按理说可以换成其他自定义的string,我试了一个urlfileopen的字符串,未成功!
- 问题2,defaultIcon的值一定是 \'XXX.exe,1\' ,至于其他的,我也没试
- 问题3,command的值需要对应于自己的批处理程序, %1 是形参接受
- 问题4,可能是我的reg文件写的不对,有些值没添加上去,比着上面那个图片添加即可
2、批处理程序的编写
1 import sys #引入模块 2 3 import os 4 from urllib.parse import unquote 5 import urllib 6 7 str = sys.argv[1] 8 exePath={\'word\':r\'C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE\', 9 \'ppt\':r\'C:\Program Files (x86)\Microsoft Office\root\Office16\POWERPNT.EXE\', 10 \'excel\':r\'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE\' , 11 \'rar\':r\'C:\Program Files\2345Soft\HaoZip\HaoZip.exe\', 12 \'txt\':\'notepad\', 13 \'pdf\':r\'C:\Program Files (x86)\2345Soft\2345Pic\2345PdfReader.exe\' 14 } 15 # os.system(\'start\') 16 print(str) 17 str=unquote(str) 18 #str=share://word?XXX 19 # 注意链接传过来 ?-》/? 多一个字符 20 str=str[8:] 21 print(str) 22 if str[:4]=="word": 23 print(str[5:]) 24 os.system(\'start "\'+exePath[\'word\']+\'" "\'+str[6:]+\'"\') 25 elif str[:3]=="ppt": 26 os.system(\'start "\'+exePath[\'ppt\']+\'" "\'+str[5:]+\'"\') 27 elif str[:5] == "excel": 28 os.system(\'start "\' + exePath[\'excel\'] + \'" "\' + str[7:] + \'"\') 29 elif str[:3]=="rar": 30 os.system(\'start "\'+exePath[\'rar\']+\'" "\'+str[5:]+\'"\') 31 elif str[:3]=="txt": 32 os.system(\'start "\'+exePath[\'txt\']+\'" "\'+str[5:]+\'"\') 33 elif str[:3]=="pdf": 34 os.system(\'start "\'+exePath[\'pdf\']+\'" "\'+str[5:]+\'"\') 35 #转exe https://blog.csdn.net/yufen9987/article/details/73865281/ 36 # 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进行解码
3、前端链接
前端的a标签的href="share://word?XXX" ,其中XXX是本地路径加文件名