標籤:c style class blog code java
最近一個項目中要點擊WEB頁面上的連結啟動自己編寫的程式,而且還要接收參數,google了1.5小時,終於初步實驗通過了。
嘗試google了:web send message windows form, bs call cs program, custom protocol...多個關鍵字組合,發現這種技術叫
registered URL protocol,在這篇文章裡介紹得比較詳細:
http://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx
1)首先寫一個測試程式:
using System;using System.Collections.Generic;using System.Text;namespace Alert{ 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(); } }}
我把程式編譯成edss.exe
2)用notepad編輯一個檔案,改名為edss.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\EDSS]
@="URL:EDSS Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\EDSS\DefaultIcon]
@="\"D:\\alert\\edss.exe\""
[HKEY_CLASSES_ROOT\EDSS\shell]
[HKEY_CLASSES_ROOT\EDSS\shell\open]
[HKEY_CLASSES_ROOT\EDSS\shell\open\command]
@="\"d:\\alert\\edss.exe\" \"%1\""
運行edss.reg後,總是提示有些登錄機碼寫入不成功,折騰了半天,看了http等協議的定義,最後終於發現是360在幹擾。
關閉360安全衛士,註冊表終於寫入成功了!
原來是360安全衛士阻止最後一個登錄機碼的寫入:
[HKEY_CLASSES_ROOT\EDSS\shell\open\command]
@="\"d:\\alert\\edss.exe\" \"%1\""
3)在IE中輸入edss://hello,ie瀏覽器彈擊一個安全警告視窗,確認後就正常啟動了我的應用程式
4)在chrome中試了一下不成功,後來發現在chrome中不能直接輸入edss://hello來啟動,必須寫一個html頁面。
馬上編寫了一行html頁面:<a href=‘edss://hello‘> start my windows program </a>
chrome也可以啟動我的windows程式了!
其它瀏覽器以後再試。