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

檢測 Active Desktop 是否啟用:FindWindowEx 鏈式查找

     編輯:VC 教學

背景:什麼是 Active Desktop?

Windows 98/IE4 引入功能,將桌面背景替換為 HTML 頁面 (Web 內容),本質上在桌面視窗層級嵌入 **Internet Explorer_Server** 控件渲染網頁。啟用後桌面圖示成為 HTML 元素,支援頻道、訂閱、動態內容。

檢測原理:視窗類別鏈路

啟用 Active Desktop 時,桌面視窗層級結構為:

Progman (Program Manager)
  └─ SHELLDLL_DefView (Shell 資料夾檢視)
       └─ Internet Explorer_Server (IE 渲染引擎視窗)  ← 關鍵標誌

若找到 Internet Explorer_Server 視窗,即判定 Active Desktop 啟用。

C++Builder 實現函式


bool __fastcall TForm1::IsActiveDesktopEnabled() {
    HWND hwnd = FindWindow("Progman", NULL);           // 1. 找 Progman
    if (!hwnd) return false;
    hwnd = FindWindowEx(hwnd, NULL, "SHELLDLL_DefView", NULL); // 2. 找 DefView
    if (!hwnd) return false;
    hwnd = FindWindowEx(hwnd, NULL, "Internet Explorer_Server", NULL); // 3. 找 IE Server
    return hwnd != NULL;
}

版本與環境差異

現代替代:檢測桌面小工具 / Widgets

  • Vista/7:側邊欄 Gadgets (sidebar.exe),檢測進程或註冊表。
  • Win10/11:Widgets 面板 (WidgetService.exe、Windows.Web.Experience.Host),檢測進程/服務狀態。

總結

鏈式 FindWindowEx 查找 Internet Explorer_Server 是 **Windows 9x/2000/XP 時代** 檢測 Active Desktop 的經典方法。**現代 Windows 已無此功能**,相關代碼僅供維護舊專案參考。新專案勿使用此檢測,改用進程/服務檢測現代桌面擴展組件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
系統Active Desktop 支援檢測可靠性
Windows 98 / 98 SE / ME原生支援,可啟用/停用高
Windows 2000 / XP支援但預設關閉,IE 整合度不同中 (類別名可能變化)
Windows Vista / 7 / 8 / 10 / 11**已移除 Active Desktop**,桌面架構重寫 (DWM、Gadgets、Widgets)**失效** (永遠返回 false)