批次控制所有開啟的 IE 視窗,顯示或隱藏左側工具窗格(收藏夾、資料夾、歷史、搜尋),適用於自動化測試、企業瀏覽器管理、淨化介面需求。
ShellWindows 集合枚舉所有 Shell 視窗(含 IE、總管)IWebBrowser2 介面識別 IE 實例(排除 file:// 協定的總管視窗)IWebBrowser2::ShowBrowserBar 控制指定 CLSID 的工具列| 工具列 | CLSID |
|---|---|
| 收藏夾 | {EFA24E61-B078-11d0-89E4-00C04FC9E26E} |
| 資料夾 | {EFA24E64-B078-11d0-89E4-00C04FC9E26E} |
| 歷史 | {EFA24E62-B078-11d0-89E4-00C04FC9E26E} |
| 搜尋 | {30D02401-6A81-11d0-8274-00C04FD5AE38} |
#pragma link "bcbie.lib"
#include "SHDocVw_OCX.h"
//---------------------------------------------------------------------------
void __fastcall MyShowIEBrowserBar(LPSTR lpCLSID, bool bShow) {
Variant v1, v2, v3;
String strCLSID(lpCLSID);
v1 = strCLSID.c_str(); // 目標工具列 CLSID
v2 = bShow; // true=顯示, false=隱藏
v3 = 0; // 保留參數
// 遍歷所有 Shell 視窗
TCppShellWindows* pShellWin = new TCppShellWindows(NULL);
for (int i = 0; i < pShellWin->Count; ++i) {
IDispatch* pDisp = (IDispatch*)pShellWin->Item(Variant(i));
if (!pDisp) continue;
// 取得 IWebBrowser2 介面
IWebBrowser2* pBrowser = NULL;
HRESULT hr = pDisp->QueryInterface(IID_IWebBrowser2, (void**)&pBrowser);
pDisp->Release();
if (FAILED(hr)) continue;
// 判斷是否為 IE(排除檔案總管)
String strUrl = String(pBrowser->get_LocationURL());
if (strUrl.LowerCase().SubString(1, 5) == "file:") continue;
// 控制工具列顯示/隱藏
pBrowser->ShowBrowserBar(v1, v2, v3);
}
delete pShellWin;
}
//---------------------------------------------------------------------------
// 使用範例:
// MyShowIEBrowserBar("{EFA24E61-B078-11d0-89E4-00C04FC9E26E}", true); // 顯示收藏夾
// MyShowIEBrowserBar("{30D02401-6A81-11d0-8274-00C04FD5AE38}", false); // 隱藏搜尋欄
#pragma link "bcbie.lib":連結 BCB IE 自動化支援庫SHDocVw_OCX.h:包含 IWebBrowser2、ShellWindows 等介面定義TCppShellWindows:BCB 封裝的 IShellWindows 包裝類別QueryInterface(IID_IWebBrowser2):標準 COM 介面查詢,確保為 IE 實例LocationURL 以 file: 開頭即為總管視窗,需排除ShowBrowserBar 三參數:pvaClsid(工具列 CLSID)、pvarShow(顯示/隱藏)、pvarSize(保留)IWebBrowser2::ExecWB 實作更多 UI 控制(如工具列鎖定、狀態列切換)bcbie.lib 且路徑正確shdocvw.dll(IE 核心元件)