網頁如何有效調用exe

 

    基於瀏覽器的應用,表現力始終不夠豐富,我們常常會想,在一個網頁中,點一下某個鏈接,能夠直接調用安裝好的可執行程序有多好啊。按照微軟的推薦,應該是通過ActiveX,把可執行程序嵌入到網頁中,例如flash的ActiveX。這樣,我們就要購買ActiveX的簽名,不通過簽名的東西,在IE6中是無法加載的,爲一個小項目購買ActiveX的簽名,代價太昂貴了。另外,很多時候還要考慮如果用戶突然關閉了瀏覽器該怎麼辦。這對播放個flash、歌曲之類的沒多大影響,但是很多時候,不能在關閉前清掃戰場,帶來的後果是災難性的。通常,在企業應用中,我們總是通過IE直接調用exe。
    最早的時候,從網頁調用一個EXE是很簡單的事情,一段javascript就可以了。但是,自從IE6開始,微軟就不再允許這種“極不安全的行爲”。這也是有道理的。沒事就給你來個“format d:/q”,即使不這麼惡劣,動不動就給你彈幾百個notebook,也確實夠恐怖的。瀏覽器不應該與操作系統有太多不必要的關聯。
    拿javascript在IE6測試之後,我幾乎放棄了直接調用exe的想法,直到有一天,看到了騰訊的實現方法。
    騰訊有一個在網頁上面顯示QQ狀態的東西,點一下就能彈出一個對話框跟該QQ用戶聊天(就是我blog左上方的那個Q我的小圖標),而不會有任何警告。好神奇啊。註冊表裏面研究了一天,終於明白了怎麼回事。

    在windows中,註冊表中包含各種協議(http,ftp,telnet等)的信息,包含了默認打開方式的參數。試一下,從IE的地址欄中輸入telnet://www.163.com,出現什麼了?彈出了一個命令行窗口,開始進行telnet操作。IE居然能完成這個,那麼爲什麼就不能完成“telnet1://參數” 呢?

    Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS]
@="SIMS"
"URL Protocol"="C://PROGRA~1//SIMS//trans.exe %l"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/DefaultIcon]
@="%SystemRoot%//system32//url.dll,0"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell]

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell/open]

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/SIMS/Shell/open/command]
@="C://PROGRA~1//SIMS//trans.exe %l"

    把這個東西導入註冊表,那麼我們在瀏覽器中輸入sims://1022,那麼就會自動調用c:/program files/sims/trans.exe(當然了,你得確實有這個文件),並把1022這個參數傳給該exe。這個操作被認爲是安全的,不會有任何的限制。
    到這裏,思路就清晰了,我們的安裝程序中,在註冊表中建個協議,例如上面的SIMS,再把要執行的exe的路徑信息寫入,在網頁直接一個超鏈接,協議://參數就可以了。exe文件接受這個參數,進行相應的處理。搞定。

    記住,協議://後面的所有字符串被看做是一個參數。那麼,exe文件永遠只有兩個參數,參數0是它的完整執行路徑,參數1就是網頁傳過來的字符串。

    到這裏,不知道講清楚了沒有,最好結合QQ的Q我,在註冊表中對照一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章