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

Windows XP 快速使用者切換功能的程式設計應對

     編輯:VC 教學

XP 引入快速使用者切換,允許在不登出的情況下切換帳號,各使用者擁有獨立桌面與設定檔,先前使用者的程式持續在背景執行。這對應用程式帶來新挑戰:必須偵測多使用者同時執行同一程式的情況並妥善處理資源衝突。

1. 全域互斥體偵測跨 Session 實例

傳統 CreateMutex 預設範圍僅限單一 Session,無法跨使用者偵測。解法:在互斥體名稱前加上 Global\\ 前綴:

m_hMutexAppRunning = CreateMutex(NULL, FALSE, "Global\\EsXPSwitchUserApp");

2. 註冊 Session 變更通知

呼叫 WTSRegisterSessionNotification 註冊接收 WM_WTSSESSION_CHANGE 訊息,wParam 包含事件類型,lParam 為 Session ID:

case WM_WTSSESSION_CHANGE:
    switch (wParam) {
        case WTS_CONSOLE_CONNECT:     // 主控台連線
        case WTS_CONSOLE_DISCONNECT:  // 主控台斷線
        case WTS_SESSION_LOGON:       // 登入
        case WTS_SESSION_LOGOFF:      // 登出
        case WTS_SESSION_LOCK:        // 鎖定
        case WTS_SESSION_UNLOCK:      // 解鎖
        case WTS_REMOTE_CONNECT:      // 遠端連線
        case WTS_REMOTE_DISCONNECT:   // 遠端斷線
            // 釋放/重新取得資源、更新狀態等
            break;
    }
    break;

3. 注意事項

  • 每個 WTSRegisterSessionNotification 必須配對 WTSUnRegisterSessionNotification(程式結束時呼叫)。
  • 需包含 Wtsapi32.h、連結 Wtsapi32.lib。
  • 在 #include <windows.h> 前定義 #define _WIN32_WINNT 0x0501。
  • 程式僅能在 XP 上執行(需 WTSAPI32.dll)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved