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

C語言實現 Windows 虛擬桌面切換器:CreateDesktop/SwitchDesktop 實戰

     編輯:關於C語言

核心 API 流程

  1. CreateDesktop("Virtual", ...) 創建名為 "Virtual" 的新桌面對象。
  2. GetThreadDesktop(GetCurrentThreadId()) 獲取當前桌面句柄備份。
  3. 啟動 explorer.exe 於虛擬桌面:STARTUPINFO.lpDesktop = "Virtual" + CreateProcess。
  4. RegisterHotKey(hwnd, id, MOD_ALT, 'Q') 註冊 Alt+Q 熱鍵。
  5. 熱鍵回調中 SwitchDesktop(hVirtualDesk) / SwitchDesktop(hCurrent) 切換。
  6. 退出時 TerminateProcess 結束 explorer,CloseDesktop 釋放資源。

關鍵代碼片段


HDESK hVirtualDesk, hCurrent;
PROCESS_INFORMATION piExplor;

void StartExplorer() {
    STARTUPINFO si = { sizeof(si) };
    si.lpDesktop = "Virtual";
    CreateProcess(NULL, "explorer", NULL, NULL, FALSE, 0, NULL, NULL, &si, &piExplor);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
    static HDESK hNow;
    switch (msg) {
    case WM_HOTKEY:
        if (wp == 0x0001) {  // Alt+Q
            hNow = (hNow == hCurrent) ? SwitchDesktop(hVirtualDesk), hVirtualDesk
                                      : SwitchDesktop(hCurrent), hCurrent;
        } else if (wp == 0x0002) { // F8 退出
            TerminateProcess(piExplor.hProcess, 1);
            CloseDesktop(hVirtualDesk);
            PostMessage(hwnd, WM_CLOSE, 0, 0);
        }
        break;
    case WM_DESTROY:
        SwitchDesktop(hCurrent);  // 確保回到原桌面
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hwnd, msg, wp, lp);
}

實用場景

  • 隱私保護:敏感操作在虛擬桌面,熱鍵一鍵切換隱藏。
  • 多任務隔離:不同專案分配不同虛擬桌面,互不干擾。
  • 自動化測試:在乾淨桌面環境運行 GUI 自動化腳本。

注意事項

  • 需管理員權限運行(創建桌面、註冊全局熱鍵)。
  • 虛擬桌面內啟動的進程無法直接與主桌面進程通訊,需 IPC。
  • 退出務必切回原桌面,否則用戶會「卡」在空桌面。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved