[轉]Windows 註冊自訂的協議

來源:互聯網
上載者:User

標籤:

[轉自] http://blog.sina.com.cn/s/blog_86e4a51c01010nik.html

1、註冊應用程式來處理自訂協議

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

         新註冊的key必須與協議scheme相匹配才可以被添加。例如,增加一個“alert:”協議,被增加到HKEY_CLASSES_ROOT的key必須是alert。在這個新的key之下,預設的字串value將顯示新協議的名字,並且URL協議字串value將包含協議特有的資訊或者Null 字元串。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協議。

         引用內容

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,1"

 

[HKEY_CLASSES_ROOT\alert\shell]

[HKEY_CLASSES_ROOT\alert\shell\open]

[HKEY_CLASSES_ROOT\alert\shell\open\command]

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

 

         增加這些設定資訊到註冊表,嘗試導航到像“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();

    }

  }

}

[轉]Windows 註冊自訂的協議

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.