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_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進行解碼
 1 ECHO OFF
 2 
 3 REM 接收URI地址(share://ppt?C:\Users\liushaofeng\Desktop\PluggableProtocol.pptx)
 4 SET PROTOCOL_ADDRESS=%1
 5 
 6 REM 接收到文件類型和文件地址(ppt?C:\Users\liushaofeng\Desktop\PluggableProtocol.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是本地路徑加文件名

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM