可插入協議擴展(Asynchronous Pluggable Protocols)主要基于異步的URL Moniker技術。 IE的URL Moniker在urlmon.dll 動態庫中實現的, 有兩種處理機制:
1. 根據URL 協議調用外部程序處理
比如telnet: or news: or mailto:,當訪問這些url的時候會打開相應的程序來處理。
比如要添加note:協議(Registering an Application to a URL Protocol), 則只要修改注冊表
[HKEY_CLASSES_ROOT]
[note]
(Default) = "URL:Note Protocol"
URL Protocol = ""
[DefaultIcon]
(Default) = "notepad.exe"
[shell]
[open]
[command]
(Default) = "c:\windows\notepad.exe %1"
在IE 中輸入 note://xxx.txt 的時候會自動用notepad 打開xxx.txt 文件
2. 根據URL 協議調用類對象來處理
可以根據URL 協議或者MIME type 注冊不同的處理對象
有兩種方式:
a) 通過在注冊表將URL 協議與COM 對象關聯
主要在注冊表中的
HKEY_CLASSES_ROOT\PROTOCOLS\Handler # URL 協議
HKEY_CLASSES_ROOT\PROTOCOLS\Filter # Mime Filter
b) 通過臨時注冊類對象將URL 協議與其關聯
// 注冊
CComPtr<IInternetSession> spSession;
CComPtr<IClassFactory> spCFHTTP;
HRESULT hr = CoInternetGetSession(0, &spSession, 0);
hr = FilterFactory::CreateInstance(CLSID_HttpProtocol, &spCFHTTP);
hr = spSession->RegisterNameSpace(spCFHTTP, CLSID_NULL, L"http", 0, 0, 0);
// 反注冊
spSession->UnregisterNameSpace(spCFHTTP, L"http");
3. FilterFactory 的實現可以參考
Asynchronous Pluggable Protocol Implementation with ATL
http://www.codeguru.com/cpp/com-tech/atl/misc/article.php/c37/
Internet Explorer下載文件的終極過濾
http://blog.csdn.net/111222/archive/2002/02/09/7255.aspx
通過Mime filter技術對網頁源碼進行過濾(監視下載文件)
http://blog.csdn.net/lion_wing/archive/2006/06/27/839134.aspx
HTML代碼過濾技術
http://blog.csdn.net/lion_wing/articles/534716.aspx
About Asynchronous Pluggable Protocols (MSDN)
Internet Explorer 編程簡述(九)在自己的瀏覽器中嵌入Google工具條
http://blog.csdn.net/CathyEagle/archive/2005/12/12/550698.aspx
放1000分,高手進來動手試試:如何提取AJAX里的HTML內容?
http://topic.csdn.net/t/20061214/12/5230161.html
這里主要通過監視IE 的下載從而保存Google Map 的地圖數據文件. 通過監視http & text/html & application/javascript 的內容來獲取圖片文件URL 和 信息.. :)