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是本地路径加文件名

 

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值