許多知名軟體(如金山詞霸、網絡螞蟻)安裝後,都會在 Internet Explorer 的工具列上加入專屬按鈕,點擊即可觸發特定功能。這篇文章將詳細說明如何透過修改登錄檔,將你自己的應用程式按鈕加入 IE 工具列中。
從 IE 5 版本開始,微軟允許開發者向工具列添加自訂按鈕。其本質是在登錄檔中建立必要的鍵值,提供建立按鈕所需的資訊,包括圖示、提示文字、點擊後的行為邏輯等。
使用 Visual Studio 工具集中的 Guidgen.exe 產生全域唯一識別碼。範例 GUID:{1FBA04EE-3024-11D2-8F1F-0000F87ABD16},下文將以此為例說明。
路徑:HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Extensions\{你的GUID}
{1FBA04EE-3024-11D2-8F1F-0000F87ABD16},代表 IE 擴充功能的類別識別碼。Yes(預設顯示)或 No(預設隱藏)。c:\vckbase.ico 或 EXE 內嵌圖示 C:\PROGRA~1\NETANTS\NetAnts.exe,1000。可支援四種行動模式,任選其一:
建立 ClsidExtension 字串值,值為該 COM 物件的 GUID。金山詞霸即採用此方式呼叫自身 COM 元件。
類似點擊 IE 歷史記錄按鈕展開的側邊欄。建立 BandCLSID 字串值,值為列的 CLSID。自訂列的製作超出本文範圍,不再贅述。
建立 Script 字串值,指向 HTML 檔案路徑(如 %SystemRoot%\web\related.htm)。在 HTML 中撰寫 VBScript 或 JavaScript,可透過 external.menuArguments 取得目前網頁資訊。
範例:網絡螞蟻取得所有連結
<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 = external.menuArguments.location.href;
protocolIndex = userURL.indexOf("://", 4);
serverIndex = userURL.indexOf("/", protocolIndex + 3);
finalURL = userURL.substring(0, serverIndex);
external.menuArguments.open(finalURL, "_blank");
</script>
建立 Exec 字串值,值為執行檔完整路徑或網址(如 c:\windows\notepad.exe 或 https://www.vckbase.com/index.html)。
以下 MFC 程式碼示範在按鈕點擊時開啟 VC 知識庫首頁:
void CIEButtonDlg::OnAdd()
{
// 由 GUIDGEN 產生
CRegKey reg;
char KeyName[] = "Software\\Microsoft\\Internet Explorer\\Extensions\\{06926B30-424E-4f1c-8EE3-543CD96573DC}";
TCHAR PathName[MAX_PATH], IconPathName[MAX_PATH], HotIconPathName[MAX_PATH];
GetModuleFileName(0, PathName, MAX_PATH);
strcpy(IconPathName, PathName);
strcpy(HotIconPathName, PathName);
strcat(HotIconPathName, ",131"); // 圖示資源 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");
reg.SetValue("https://www.vckbase.com/", "Exec"); // 開啟網頁
}
更多細節請參考本文附帶的示範專案原始碼。