首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

程式控制 IE 工具列顯示/隱藏:收藏夾、歷史、搜尋欄完整解決方案

     編輯:關於C++

應用場景

批次控制所有開啟的 IE 視窗,顯示或隱藏左側工具窗格(收藏夾、資料夾、歷史、搜尋),適用於自動化測試、企業瀏覽器管理、淨化介面需求。

核心原理

  1. 透過 ShellWindows 集合枚舉所有 Shell 視窗(含 IE、總管)
  2. 以 IWebBrowser2 介面識別 IE 實例(排除 file:// 協定的總管視窗)
  3. 呼叫 IWebBrowser2::ShowBrowserBar 控制指定 CLSID 的工具列

關鍵 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(保留)

擴充應用

  • 結合登錄檔監控,偵測 IE 新視窗開啟時自動套用預設工具列配置
  • 整合至群組原則登入腳本,統一企業環境 IE 介面
  • 搭配 IWebBrowser2::ExecWB 實作更多 UI 控制(如工具列鎖定、狀態列切換)

常見問題排查

  1. 編譯錯誤:確認專案加入 bcbie.lib 且路徑正確
  2. 介面查詢失敗:檢查系統是否安裝 shdocvw.dll(IE 核心元件)
  3. 權限問題:Vista/Win7+ 需以相同完整性層級執行,或啟用 UIAccess
  4. 64 位元相容:若目標 IE 為 64 位元,編譯器需產生 64 位元程式碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved