判斷筆記本蓋子的開啟狀態的方法(RegisterPowerSettingNotification,GUID_LIDSWITCH_STATE_CHANGE)

來源:互聯網
上載者:User

  普通的應用程式是接收不到筆記本蓋子的狀態的訊息的, 應用程式必須向系統註冊後才能收到該訊息.
  我使用這個訊息的原因是, 我想在筆記本蓋子合上後禁用鍵盤和滑鼠, 以免誤操作.

  要註冊該訊息, 使用 RegisterPowerSettingNotification 函數, 其中的GUID指定為 GUID_LIDSWITCH_STATE_CHANGE.
  應用程式退出時必須要取消該註冊訊息, 使用 UnregisterPowerSettingNotification.

  樣本程式:
    在應用程式初始化時註冊訊息:
      HPOWERNOTIFY hPowerNotify;
      hPowerNotify = RegisterPowerSettingNotification(hWnd,&GUID_LIDSWITCH_STATE_CHANGE,DEVICE_NOTIFY_WINDOW_HANDLE);
    在應用程式退出時取消註冊,要在註冊時的視窗被Destroy之前哦:
      UnregisterPowerSettingNotification(hPowerNotify);

  向系統註冊後,就會在視窗過程中收到蓋子狀態的訊息了:
    uMsg:WM_POWERBROADCAST
    wParam:PBT_POWERSETTINGCHANGE
    lParam:POWERBROADCAST_SETTING*

  可以按如下方式處理:

LRESULT __stdcall WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){    if(uMsg == WM_POWERBROADCAST){        if(wParam==PBT_POWERSETTINGCHANGE){            POWERBROADCAST_SETTING* ppbs = (POWERBROADCAST_SETTING*)lParam;            if(memcmp(&ppbs->PowerSetting,&GUID_LIDSWITCH_STATE_CHANGE,sizeof(GUID))==0){                unsigned int lid_state = *(unsigned int*)ppbs->Data;                if(lid_state == 1){                    //蓋子是開啟的                }else{                    //蓋子是合上的                }            }            return 0;        }    }    //...}

注意, 該方式處理起來不會有什麼錯誤, 但是需要注意, 如果筆記本有外接顯示器的話, 這個判斷就不能完全說明電腦沒有顯示了, 只是本子自身的那個顯示器狀態變化了而已. 所以還需要檢測是否有外接顯示器.

判斷是否有外接顯示器的方法:
  http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/95a8da10-a191-4438-9e87-dffa546a665c
也可以使用:GetSystemMetrics(SM_CMONITORS), 至於它與 EnumDisplayMonitors 的區別,詳見:
  http://msdn.microsoft.com/en-us/library/windows/desktop/dd162610%28v=vs.85%29.aspx

另:MSDN上說這個函數最小的系統版本要求為Windows Vista, 所以在XP下面的判斷方法尚不清楚.

女孩不哭 @ 2013-05-30 03:06:41 @ http://www.cnblogs.com/nbsofer

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.