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


1、注冊應用程序來處理自定義協議

     你必須添加一個新的key以及相關的value到HKEY_CLASSES_ROOT中,來使應用程序可以處理特殊的URL協議。

     新注冊的key必須與協議scheme相匹配才可以被添加。例如,增加一個“alert:”協議,被增加到HKEY_CLASSES_ROOT的key必須是alert。在這個新的key之下,默認的字符串value將顯示新協議的名字,並且URL協議字符串value將包含協議特有的信息或者空字符串。Keys將同樣被添加到DefaultIcon和shell中。

     默認的DefaultIcon key的字符串value必須是新URL協議圖標文件名的路徑。

     在shell key之下,一個key使用一個動詞(就像open)將被添加。一個command(命令) key和一個DDEEXEC(動態數據交換執行) key都是使用動詞來添加的。這command和DDEEXEC keys之后的values都是用來調用(或者啟動)處理新協議的應用程序。

 

2、啟動處理程序

     當一個用戶點擊一個注冊了你的自定義URL協議的鏈接后,Windows Internet Explorer(IE)啟動注冊的URL協議的處理器。如果指定shellopen命令在注冊表中包含一個%1參數的話,Internet Explorer傳遞這個URI給注冊協議的處理器。這最后的統一資源標識符(URI)被編碼(%1);即16進制換碼符被轉換為等價的UTF-16字符。例如,用%20字符串取代空格。

     安全警示:應用程序處理URL協議必須全力面對惡意數據。因為處理程序接收來自不信任源的數據,URL和其它參數值傳遞給應用程序可能包含的惡意數據企圖使用處理程序。因此,處理程序可以首先啟動基於外部數據的空閑行為確認這些行為以及它們的用戶。

 

3、示例

     接下來的例子演示如何注冊alert.exe應用程序,來處理alert協議。

       首先我們可以新建一個txt文件,寫入內容如下:

Windows Registry Editor Version 5.00

 

[HKEY_CLASSES_ROOT\alert]

@="URL:alert Protocol"

"URL Protocol"="C:\\Program Files\\Alert\\alert.exe"

 

[HKEY_CLASSES_ROOT\\alert\\DefaultIcon]

@="C:\Program Files\Alert\alert.exe"

 

[HKEY_CLASSES_ROOT\\alert\\shell]

@="open"

 

[HKEY_CLASSES_ROOT\\alert\\shell\\open]

@="open"

 

[HKEY_CLASSES_ROOT\\alert\shell\\open\\command]

@="\"C:\\Program Files\\Alert\\alert.exe\" \"%1\""

       注意:a.路徑使用雙杠"\\";b.如果字符串中有雙引號("),那么需要加轉義字符"\"

然后將文件名改為Alert.reg,雙擊本文件執行,將這些項寫入到注冊表。


 

    增加這些設置信息到注冊表,嘗試導航到像“alert:Hello%20World”這樣的URLs中,將會嘗試啟動alert.exe程序並且在命令行中傳遞“Hello World”。

 

4、協議處理實例

     下面的代碼包含了一個簡單的C#控制台應用程序演示了一種實現alert協議處理程序的方式:

復制內容到剪貼板 程序代碼

using System;

using System.Collections.Generic;

using System.Text;

namespace Alert1

{

  class Program

  {

    static string ProcessInput(string s)

    {

       // TODO Verify and validate the input 

       // string as appropriate for your application.

       return s;

    }

 

    static void Main(string[] args)

    {

      Console.WriteLine("Alert.exe invoked with the following parameters.\r\n");

      Console.WriteLine("Raw command-line: \n\t" + Environment.CommandLine);

 

      Console.WriteLine("\n\nArguments:\n");

      foreach (string s in args)

      {

        Console.WriteLine("\t" + ProcessInput(s));

      }

      Console.WriteLine("\nPress any key to continue...");

      Console.ReadKey();

    }

  }

}



5、測試

a、打開記事本,輸入以下代碼,並保存為test.html
<a href="alert://Hello!">點擊這里啟動程序</a>

b、將test.html拖入瀏覽器中打開,本人在Google Chrome中測試的;

c、點擊頁面中的按鈕"點擊這里啟動程序";

d、你發現剛才寫的程序運行了,並且TextBox中顯示"alert://Hello!"。

 


免責聲明!

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



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