• 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文件,自动添加一些东西。

     1 Windows Registry Editor Version 5.00
     2 [HKEY_CLASSES_ROOTshare]  
     3 @="URL:Share Protocol"  
     4 "URL Protocol"="C:\cmd批处理\share.bat"   
     5 [HKEY_CLASSES_ROOTshareDefaultIcon]
     6 @="C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE,1" 
     7 [HKEY_CLASSES_ROOTshareshell]
     8 @="open"
     9 [HKEY_CLASSES_ROOTshareshellopen]
    10 @="open"
    11 [HKEY_CLASSES_ROOTshareshellopencommand] 
    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
    ootOffice16WINWORD.EXE',
     9          'ppt':r'C:Program Files (x86)Microsoft Office
    ootOffice16POWERPNT.EXE',
    10          'excel':r'C:Program Files (x86)Microsoft Office
    ootOffice16EXCEL.EXE' ,
    11          'rar':r'C:Program Files2345SoftHaoZipHaoZip.exe',
    12          'txt':'notepad',
    13          'pdf':r'C:Program Files (x86)2345Soft2345Pic2345PdfReader.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:pythonlogin.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进行解码
     1 ECHO OFF
     2 
     3 REM 接收URI地址(share://ppt?C:UsersliushaofengDesktopPluggableProtocol.pptx)
     4 SET PROTOCOL_ADDRESS=%1
     5 
     6 REM 接收到文件类型和文件地址(ppt?C:UsersliushaofengDesktopPluggableProtocol.pptx)
     7 SET FILE_TYPE_PATH=%PROTOCOL_ADDRESS:~8%
     8 
     9 REM 文件类型为ppt时,截取文件路径,并传递给word
    10 IF %FILE_TYPE_PATH:~0,3%==ppt (
    11     REM 启动本地word程序,并传入文件路径地址
    12     ECHO %FILE_TYPE_PATH:~4%
    13     start powerpnt %FILE_TYPE_PATH:~4%
    14 )
    15 
    16 REM 其他文件类型,可以模仿着往下写
    17 
    18 EXIT

    3、前端链接

    前端的a标签的href="share://word?XXX"  ,其中XXX是本地路径加文件名

  • 相关阅读:
    Elasticsearch 技术分析(五):如何通过SQL查询Elasticsearch
    IntelliJ IDEA 2018.3 重大升级,哪些功能打动了你?
    终于有人把“TCC分布式事务”实现原理讲明白了!
    Elasticsearch 技术分析(一): 基础入门
    拜托!面试请不要再问我Spring Cloud底层原理
    一个正则表达式引发的血案
    程序员啊,他又加班了
    程序员你为什么这么累 | 编码规范
    全文搜索引擎 ElasticSearch 还是 Solr?
    TCP三次握手原理,你真的了解吗?
  • 原文地址:https://www.cnblogs.com/xunhanliu/p/10485474.html
Copyright © 2020-2023  润新知