url鏈結開啟本地應用(測試通過)

2021-09-10 04:23:48 字數 3066 閱讀 6318

基於windows!!

模擬mailto://***x

主要參考: 

1、在網頁上本地辦公

網頁應用越來越方便,基於mfc等可視介面的應用越來越乏力。需求:在網頁上開啟乙個本地的檔案

不過當檔案比較大的時候,經常會打不開,而且對網路要求比較高

3、檔案在cmdline中開啟的方式一般是:  "***.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的值一定是 '***.exe,1'  ,至於其他的,我也沒試

問題3,command的值需要對應於自己的批處理程式, %1 是形參接受

問題4,可能是我的reg檔案寫的不對,有些值沒新增上去,比著上面那個新增即可

2、批處理程式的編寫

import sys  #引入模組

import os

from urllib.parse import unquote

import urllib

str = sys.ar**[1]

exepath=

# os.system('start')

print(str)

str=unquote(str)

#str=share://word?***

# 注意鏈結傳過來 ?-》/? 多乙個字元

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

# pyinstaller -f d:\python\login.py

最後使用pyinstaller  -f  ***.py生成.exe檔案。

這裡需要說明兩點:

問題1:前端的a標籤的href="share://word?***"  ,其中***是本地路徑加檔名

問題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?***"  ,其中***是本地路徑加檔名

android Intent開啟URL鏈結

一 開啟鏈結intent it new intent intent.action view,uri.parse it.setclassname com.android.browser com.android.browser.browseractivity getcontext startactivi...

shell指令碼測試url是否通

最近在寫雙機部署的shell指令碼,需要通過測試指定的url來確定專案 springboot 是否啟動成功,思路 通過curl命令來訪問指定的url curl引數說明 i head 僅返回頭部資訊,使用head請求 m 10 最多查詢10s o dev null 遮蔽原有輸出資訊 s silent ...

node開啟本地應用程式

最簡單的方法 const cp require child process cp.exec start 自動開啟預設瀏覽器 另一種方法是安裝open 依賴包 const open require open async opens the url in the default browser.awai...