Windows 98/2000 引入的 Active Desktop 將桌面整合為 Web 內容容器(實質為 Internet Explorer_Server 視窗)。本文提供一個簡潔的 C++ Builder 函數,透過視窗類別名稱層級查找,快速判斷 Active Desktop 是否處於啟用狀態。
bool __fastcall TWallFrm::ActiveDesktop() {
// 檢測是否啟用了 Active Desktop
// 是則返回 true,否則返回 false
HWND hwnd;
hwnd = FindWindow("Progman", NULL); // 1. 程式管理員 (桌面背景)
hwnd = FindWindowEx(hwnd, NULL, "SHELLDLL_DefView", NULL); // 2. Shell 資料夾檢視
hwnd = FindWindowEx(hwnd, NULL, "Internet Explorer_Server", NULL); // 3. IE 渲染引擎視窗
return (hwnd > 0); // 找到 IE_Server 視窗即表示 Active Desktop 啟用
}
| 層級 | 視窗類別名稱 | 說明 |
|---|---|---|
| 1 | Progman | Program Manager,經典桌面主視窗(Win9x/NT4) |
| 2 | SHELLDLL_DefView | Shell 資料夾預設檢視,負責桌面圖示顯示 |
| 3 | Internet Explorer_Server | Active Desktop 核心:嵌入式 IE 渲染引擎,負責顯示 HTML 桌面內容 |
若第 3 層視窗存在(hwnd > 0),表示 Active Desktop 已啟用;否則為傳統桌面模式。
此方法無需 COM 介面或登錄檔查詢,純 API 呼叫,效能極佳且程式碼極簡。