如何往IE工具條添加按鈕
浙江省溫嶺市電信局 王駿
下載示例工程
問題提出:
金山詞霸、網絡螞蟻等軟件安裝後會向IE的工具條添加自己的按鈕。按下按鈕後還會作出相應的動作,這種功能是如何實現的呢?讀完本文,您也可以將自己應用程序的按鈕添加到IE的工具條中。
基本原理:
從IE5開始便允許我們向工具欄添加自己的按鈕,其本質就是修改註冊表,添加創建此按鈕所需的信息。
實現步驟:
1.創建此按鈕的GUID(globally unique identifier)
你可以通過Visual Studio中的Guidgen.exe來產生GUID。
例如我生成的GUID是{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
以下的例子中我都使用這個GUID來作說明。
2.創建子鍵HKEY_LOCAL_MACHINE/Software/Microsoft/Internet
Explorer/Extensions/{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
3.在此子鍵下創建如下字串值。
(1)CLSID
這是IE的CLSID,其值必須爲{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
(2)Default Visible
指明此按鈕默認狀態下是否可見,Yes表示可見,No爲不可見
(3)ButtonText
按鈕文字
(4)Icon
默認狀態下的圖標全路徑,例如c:/vckbase.ico。也可以是EXE文件中包含的圖標,例如:C:/PROGRA~1/NETANTS/NetAnts.exe,1000
(5)HotIcon
鼠標移到按鈕上時的圖標全路徑
如下子鍵爲按下按鈕後需要執行的相應動作:可以是COM對象、瀏覽條Explorer Bar、腳本Script、可執行文件。
下面我們逐個進行介紹。
①COM對象
你需要建立名爲ClsidExtension的字串值,其值應該爲此COM對象的GUID
例如金山詞霸就使用ClsidExtension來調用自己的COM對象。
②瀏覽條Explorer Bar
所謂瀏覽條就是類似我們按下往IE歷史按鈕後打開的歷史記錄列表,其本質好比MFC中的CReBar對象。 瀏覽條也可以自己製作,
因爲超出了本文的範圍,暫不作講解。
爲了在按下按鈕後打開一個瀏覽條,你需要建立名爲BandCLSID的字串值,其值爲瀏覽條的CLSID
③腳本Script
按下按鈕後執行的腳本,例如:"%SystemRoot%/web/related.htm"
你可以在這個HTML文件裏面加上腳本來得到IE當前的許多信息,需要注意的是假如你想通過Script打開非腳本的HTML文件是不可行的。
請參考如下NetAnts取得當前頁所有鏈接的腳本代碼
<script language="VBScript"> --On Error Resume Next --set NetAntsApi = CreateObject( "NetAnts.API" ) --if err<>0 then -- --Alert("NetAnts not properly installed on this PC!") --else -- --set links = external.menuArguments.document.links -- --ReDim params(links.length*2) -- --params(0)=external.menuArguments.document.Url -- --for i = 0 to links.length-1 -- -- --params(i*2+1)=links(i).href -- -- --params(i*2+2)=links(i).innerText -- --next -- --NetAntsApi.AddUrlList params --end if </script> |
我們再看一個比較有用的腳本,這段腳本的作用是得到當前地址,並打開此網址的首頁。
<script> --//userURL得到的是當前地址,例如是http://www.vckbase.com/article/controls/index.html --userURL=external.menuArguments.location.href; --protocolIndex=userURL.indexOf("://",4); --serverIndex=userURL.indexOf("/",protocolIndex + 3); --finalURL=userURL.substring(0,serverIndex); --external.menuArguments.open(finalURL, "_blank");///打開網址http://www.vckbase.com/ </script> |
關於external等對象的具體使用方法請參閱微軟的《動態HTML開發參考大全》--人民郵電出版社出版
④可執行文件
假如我們想讓IE在按下按鈕後執行一個可執行文件, 你可以增加名爲Exec的字串值,其值爲此可執行文件的全路徑,
例如c:/windows/notepad.exe或者是一個網址http://www.vckbase.com/index.html
下面我們介紹一個簡單的例子。
void CIEButtonDlg::OnAdd()
{ --///這是由GUIDGEN產生的GUID:{06926B30-424E-4f1c-8EE3-543CD96573DC} --CRegKey reg; --char KeyName[]="Software//Microsoft//Internet Explorer//Extensions//{06926B30-424E-4f1c-8EE3-543CD96573DC}"; --TCHAR PathName[MAX_PATH]; --TCHAR IconPathName[MAX_PATH]; ///正常時的圖標全路徑 --TCHAR HotIconPathName[MAX_PATH]; ///鼠標覆蓋時的圖標全路徑 --GetModuleFileName(0,PathName,MAX_PATH); ///得到本可執行文件的路徑 --strcpy(IconPathName,PathName); --strcpy(HotIconPathName,PathName); --strcat(HotIconPathName,",131"); ///131是圖標的ID,你可以以資源方式打開EXE文件就可以看到所有資源及其ID --strcat(IconPathName,",129"); --reg.Create(HKEY_LOCAL_MACHINE,KeyName); --reg.SetValue("{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}","CLSID"); --reg.SetValue("Yes","Default Visible"); --reg.SetValue("VC知識庫","ButtonText"); --reg.SetValue(IconPathName,"Icon"); --reg.SetValue(HotIconPathName,"HotIcon"); --/////假如是執行腳本,可以是reg.SetValue("c://test.html","Script"); ///在test.html 存放你的腳本代碼 --reg.SetValue("http://www.vckbase.com/","Exec");///打開網頁 } |
在此例子中我們實現了一個按鈕,點擊它便會打開VC知識庫首頁。
具體可以參考本文提供的示例工程