核心介面:IShellWindows
代表 Shell 開啟視窗集合 (含 IE、資源管理器)。IE 不註冊 ROT,必須透過此介面枚舉。
VC/C++Builder 實現步驟
- 建立介面指標:`SHDocVw::IShellWindowsPtr spShellWindows;`
- `spShellWindows.CreateInstance(__uuidof(SHDocVw::ShellWindows));`
- 取得數量:`long nCount = spShellWindows->GetCount();`
- 迴圈取得各項:`IDispatchPtr spDisp = spShellWindows->Item(_variant_t(i, VT_I4));`
- 查詢 `IWebBrowser2`:`spDisp->QueryInterface(__uuidof(SHDocVw::IWebBrowser2), (void**)&spBrowser);`
- 取得文件:`IDispatchPtr spDocDisp = spBrowser->Document;` → `QueryInterface` 為 `MSHTML::IHTMLDocument2`。
應用場景
- 記錄瀏覽歷史/分析使用者行為。
- 內容過濾/翻譯 (修改 DOM)。
- 自動填寫表單 (設定 `input.value`)。
- 截圖/列印特定區域。
跨語言通用性
COM 為二進位標準,VB/Delphi/C++Builder 同樣可用,只需引用 `SHDocVw`、`MSHTML` 型別庫。
注意
- 需處理 `spShellWindows->Item` 可能返回非 IE 物件 (資源管理器),用 `spBrowser->FullName` 判斷是否含 `iexplore.exe`。
- IE 保護模式 (Vista+) 可能阻擋跨進程存取,需降低權限或簽名。