標籤:
[轉自] 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 註冊自訂的協議