需要在應用程式中以程式碼控制所有開啟的 IE 視窗左側工具列 (如「收藏夾」、「歷史記錄」、「搜尋」、「資料夾」) 的顯示或隱藏。
ShellWindows 物件遍歷所有 Shell 視窗 (包含 IE 與檔案總管)。IWebBrowser2 介面。LocationURL 判斷是否為檔案總管 (以 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 = String(lpCLSID), v2 = bShow, v3 = 0;
TCppShellWindows *pShellWin = new TCppShellWindows(NULL);
for (int i = 0; i < pShellWin->Count; i++)
{
IDispatch *pDisp = (IDispatch*)pShellWin->Item(Variant(i));
if (!pDisp) continue;
IWebBrowser2 *pBrowser;
if (SUCCEEDED(pDisp->QueryInterface(IID_IWebBrowser2, (void**)&pBrowser)))
{
pDisp->Release();
String strUrl = 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); // 隱藏搜尋
此函數經測試可直接在 C++ Builder 中使用,需專案加入 bcbie.lib 並包含 SHDocVw_OCX.h。