1. 程式人生 > >利用URL Protocol實現網頁呼叫本地應用程式

利用URL Protocol實現網頁呼叫本地應用程式

由於做專案需要實現如題的一個功能,所以搜尋了相關資料。

下面轉載CSDN的一篇文章和百度文庫的一篇文章,標記有待後期詳細學習。

自定義URL Protocol 協議

一些應用軟體可以在瀏覽器中點選一個url後自動啟動,並執行操作。這是咋實現的呢?
我在 google了許多也找個部落格說明。接照這些文件我也新手試了一下。

通過網站呼叫可執行程式,主要是修改登錄檔,註冊 URL Protocol 協議。

第一步:按照如下圖所示建立登錄檔

其中 在登錄檔的 [HKEY_CLASSES_ROOT] 主鍵下 建立[qiaoker]建。
[qiaoker] 此鍵可以自定義任意。

第二步:登錄檔中建立相關鍵值對。

注意到上面 command 項的值為 C:\Program Files (x86)\Qiaoker\updater.exe "%1" ,這個"%1"是傳遞給 updater.exe的引數。
使用時我們會在後面講到如何使。

第三步:編寫測試頁面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml

">
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
    <body>
        <div>
            <a href="qiaoker://cid:110&username:xxh">
            執行可執行檔案
            </a>
        </div>
    </body>
</html>

說明:QiaokerProtocol: 是登錄檔中註冊的協議名稱。
   cid:110&username:xxh 是傳入可執行程式的引數。
   程式收到引數據自已去解析字串中的相關資訊。

其它說明:
 我是用 Inno Setup IDE 生成的登錄檔, 在程式安裝時寫入登錄檔,解除安裝時刪除相關注冊表資訊。
 Inno Setup 寫入登錄檔的程式碼如下:
 [Registry]
Root: HKCR; SubKey: QiaokerProtocol; ValueData: "Qiaoker Protocol"; ValueType: string; Flags: CreateValueIfDoesntExist UninsDeleteKey;
Root: HKCR; SubKey: QiaokerProtocol; ValueName: "URL Qiaoker Protocol"; Flags: CreateValueIfDoesntExist; ValueType: string;
Root: HKCR; SubKey: QiaokerProtocol\DefaultIcon; ValueData: E:\Client1VNSkia2\bin\debug\updater.exe; Flags: CreateValueIfDoesntExist; ValueType: string;
Root: HKCR; SubKey: QiaokerProtocol\shell\open\command; ValueData: "E:\Client1VNSkia2\bin\debug\updater.exe ""%1"""; Flags: CreateValueIfDoesntExist; ValueType: string;

動手實現

1)自動進行reg登錄檔註冊

下面自己利用VS2008編寫一個控制檯程式,輸出hello world字串,進行實際測試。

此處參考百度文庫中的說明,利用記事本直接構造一個reg檔案,實現上述自動註冊的功能:

################################新增自定義URL Protocol##################################
#####################################################################################
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Webshell]
"URL Protocol"="D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe"
@="WebshellProtocol"
[HKEY_CLASSES_ROOT\Webshell\DefaultIcon]
@="D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe,1"
[HKEY_CLASSES_ROOT\Webshell\shell]
[HKEY_CLASSES_ROOT\Webshell\shell\open]
[HKEY_CLASSES_ROOT\Webshell\shell\open\command]
@="\"D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe\" \"%1\""
#####################################################################################
在#內的為自定義URL Protocol的登錄檔資訊,對每一行說明一下:

第一行是登錄檔工具的版本資訊,可以自己改一改,或者自己匯入任意一個註冊資訊,把這一行復制過來就行了;

第二行中的Simu就是在HKEY_CLASSES_ROOT下面新增一個Simu樹,其中Simu的名稱就對應著自定義URL Protocol的名稱,在web中呼叫的時候需要這個名稱;

第三行中的"x:\\simu\\Simulink.exe"是指定應用程式的路徑,注意只能是exe的程式;

第四行是協議的名稱,可以是任意字串,後面不會用到;

第五行表示在Simu中再加一個分支,照抄,不用管;

第六行中的x:\\simu\\Simulink.exe也是對應的程式路徑,後面的1照抄;

第七行同第五行;第八行同第五行;第九行同第五行;

第十行也是將路徑換成自己的程式路徑即可,其中%1表示到引數,引數可以在你的程式simulink.exe中解析得到。
將#之間的內容複製到一個txt文件中,修改後綴名為.reg,雙擊該檔案即可直接匯入到登錄檔中。如下圖:

2)生成exe控制檯程式

webshell2.exe是利用VS2008建立的win32 控制檯程式,原始碼如下:

// webshell2.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
	if(argc<2)
	{
		printf("zssure hello\n");
		Sleep(1000*10);
	}
	else
		printf("%s\n",argv[1]);
	Sleep(1000*10);
	return 0;
}


只是輸出zssure hello字串,但是因為控制檯視窗會一閃而過,所以添加了Sleep語句,目的是為了能夠讓大家看到瀏覽器實實在在呼叫了控制檯程式,實際執行過程中可以註釋掉Sleep語句。

3)構造網頁測試程式碼

然後構造一個最簡單的測試頁面進行呼叫測試,測試頁面程式碼僅為一行,如下:

<html>
<a href="Webshell:hello">Wheshell</a>
</html>

實際執行的演示效果如下所示:

時間:  20140514

郵箱:[email protected]

相關推薦

利用URL Protocol實現網頁呼叫本地應用程式

由於做專案需要實現如題的一個功能,所以搜尋了相關資料。 下面轉載CSDN的一篇文章和百度文庫的一篇文章,標記有待後期詳細學習。 自定義URL Protocol 協議 一些應用軟體可以在瀏覽器中點選一個url後自動啟動,並執行操作。這是咋實現的呢? 我在 goog

迅雷,電驢通過利用URL Protocol實現網頁呼叫本地應用程式

由於做專案需要實現如題的一個功能,所以搜尋了相關資料。 下面轉載CSDN的一篇文章和百度文庫的一篇文章,標記有待後期詳細學習。 自定義URL Protocol 協議 一些應用軟體可以在瀏覽器中點選一個url後自動啟動,並執行操作。這是咋實現的呢? 我在 goog

URL Protocol實現網頁呼叫本地應用程式

自定義URL Protocol 協議 一些應用軟體可以在瀏覽器中點選一個url後自動啟動,並執行操作。這是咋實現的呢? 我在 google了許多也找個部落格說明。接照這些文件我也新手試了一下。 通過網站呼叫可執行程式,主要是修改登錄檔,註冊 URL Protocol

PC網頁js呼叫本地應用程式

最近要現實一個在PC網頁中實現點選按鈕呼叫本地應用程式的功能 其實實現原理也非常簡單, 首先註冊一個本地登錄檔檔案,指向本地應用程式路徑 其次在網頁中用js指向這個登錄檔檔案,就可以實現網頁呼叫本地應用程式  Windows Registry Editor Version 5.00

網頁Web上呼叫本地應用程式

一、web呼叫本地應用程式的思路 這個方法主要思路是利用自定義URL Protocol來呼叫應用程式。瀏覽器在解析到自定義URL Protocol之後,會尋找登錄檔,然後通過登錄檔啟動相應的程式,然後啟動改程式,傳入引數。就好像是在瀏覽器可以開啟迅雷類似。 1

html網頁呼叫本地exe程式實現方法

最近在做一個專案,要什麼網頁裡調exe。。。開始以為不能實現,後來想想很多就跟淘寶網頁上點旺旺一樣,還有QQ,迅雷等都是這種。搜了一下解決方法,是添加註冊表,自己運行了可以使用。 首先開啟登錄檔,方法win+r 進入執行,或者從開始裡找執行輸入regedit進入登錄檔。 然

PHP 網頁呼叫本地exe程式例項

一、需求:在做網站的時候,有些網站網頁面需要呼叫本地的exe程式。 二、方法:利用註冊URL Protocol的方式。 程式碼如下: 1、檢視檔案裡面的程式碼: <a href="fyexe://123456">FY辦公</a> 2、reg檔案裡面

js呼叫本地應用程式

這兩天公司由於web下載大型的檔案(超2G的MP4檔案)的時候,下載到2G左右瀏覽器就會自動斷開連線,後來沒辦法就準備些一個下載工具!從瀏覽器中啟動下載工具,並傳遞下載引數給下載工具,在工具中下載並管理資源,廢話就這麼多,轉入正題。 在網上翻閱各種資料,總

通過瀏覽器超連結呼叫本地應用程式

參考了一下qq的方式。 tencent://Message/?Uin=000000&websiteName=qzone.qq.com&Menu=yes  在登錄檔裡面新增下面,就能實現 Windows Registry Editor Version 5.0

網頁呼叫本地windows應用例子

1.註冊hello_world.exe 應用處理 test: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\test] //建立登錄檔的路徑 @="URL:test Protocol" //對應一

通過自定義URL協議在Web網頁中啟動本地應用程式

    在做web應用的時候,我們經常會遇到在web中呼叫本地應用程式的問題,例如在web中點選一個按鈕,然後開啟自己寫的或者別人的應用程式。上網比較留意的同學應該會發現,想qq客服,淘寶的阿里旺旺客服都會有這樣的效果。     下面我主要介紹一種現在主流的處理方法,這種方

利用@media screen實現網頁布局的自適應

sel right ont min spl 布局 lec ati edi 利用@media screen實現網頁布局的自適應 優點:無需插件和手機主題,對移動設備友好,能夠適應各種窗口大小。只需在CSS中添加@media screen屬性,根據瀏覽器寬度判斷並輸出不同的長寬

【iOS】通過NSURLProtocol實現網頁載入本地快取資料

一.專案需求 專案中有個海報生成功能,使用UIWebView載入一些網頁,因為海報使用率比較高,有時載入網頁比較慢會影響使用者體驗,因此我們在APP啟動後,將一些固定資源,如css、圖片等,先快取到本地。載入網頁時,通過NSURLProtocol,優先使用本地的檔案,以加快網頁載入速

最新HTML網頁教你呼叫本地Python程式

首先宣告,在HTML中呼叫本地Python程式是十分不推薦的,一是因為網頁呼叫本地程式的許可權正在被取消,二是因為真不如JS寫直接,三是隻能在自己本地呼叫。 但如果你要用,像我一樣,需要在課堂上進行一個Python程式碼的展示,並且想要一個好看的UI介面的話,可以這樣來做,

利用URL重寫實現引數目錄化

                引數目錄化,就是將 類似 http://www.abc.com/store/store.aspx?id=1024 這樣的網址,對外改為 http://www.abc.com/1024。要實現這種功能,可以用以下三種方式(應該不僅限這三種吧!)1、用微軟的 Microsoft U

利用@media screen實現網頁佈局的自適應

優點:無需外掛和手機主題,對移動裝置友好,能夠適應各種視窗大小。只需在CSS中新增@media screen屬性,根據瀏覽器寬度判斷並輸出不同的長寬值 準備工作1:設定Meta標籤 首先我們在使用Media的時候需要先設定下面這段程式碼,來相容移動裝置的展示效果:

利用匿名管道實現遠端呼叫CMD

在一個程序裡用雙管道來回顯,程式碼如下: #include "windows.h" #include "stdio.h" unsigned long WINAPI readFuc(void *p); HANDLE hReadPipeCmd = NUL

網頁上開啟本地應用程式——Windows下 URI Scheme的使用

一、問題描述: 最近做的專案要求從網頁端啟動本地的應用程式(windows系統下),同時會給應用程式傳遞某些引數,所以接觸到了URL Protocol這個東西。 二、所處條件: 1、本地的應用程式是unity3D開發的軟體。 2、目標平臺是windows PC端。 3、使用

利用AJAX技術實現網頁無重新整理進度條顯示

在網頁中實現頁面無重新整理的進度條顯示不是一件很麻煩的事情,但如果這個進度條要能準確反映當前事務或者複雜邏輯的執行進度,那麼卻並不是一件容易的事情,目前AJAX技術流行,所以本文作者試想通過AJAX來實現網頁準確進度條,以銄讀者。首先應該想一個問題,複雜事務或者事務邏輯如果不

通過Html網頁呼叫本地安卓app程式程式碼

前段時間寫一些移動端的專案,正好專案中遇到與native互動的需求,特此將其整理下來: 一. 通過html頁面開啟Android本地的app 首先在編寫一個簡單的html頁面 <html> <head>