2012-09-29 90 views

回答

0

MSDN power management documentation解釋,你可以得到通知,當顯示器打開或關閉。基本上,您註冊了廣播消息,然後在發生變化時您將收到一條WM_POWERBROADCAST消息。有幾種不同的GUID用於監視顯示狀態,具體取決於您使用的Windows版本。

在你的程序的開始(創建主窗口後),你這樣做:(有choices for the GUID取決於哪個版本的Windows您的目標等)

HPOWERNOTIFY hPower = 
    RegisterPowerSettingNotification(hwndMain, GUID_SESSION_DISPLAY_STATUS, 0); 

然後你的主窗口過程中:

case WM_POWERBROADCAST: 
    if (wParam == PBT_POWERSETTINGCHANGE) { 
    const POWERBROADCAST_SETTING *pSetting = 
     reinterpret_cast<const POWERBROADCAST_SETTING*>(lParam); 
    if (pSetting->PowerSetting == GUID_SESSION_DISPLAY_STATUS) { 
     assert(pSetting->DataLength >= sizeof(DWORD)); 
     DWORD data = *reinterpret_cast<const DWORD*>(&pSetting->Data); 
     switch (data) { 
     case 0: /* monitor is off */ break; 
     case 1: /* monitor is on */ break; 
     case 2: /* monitor is dimmed */ break; 
     default: /* ???? */ break; 
     } 
    } 
    } 
    break; 

如果在任何時候,你不再計較動力通知,您可以註銷:

UnregsisterPowerSettingNotification(hPower); 
hPower = NULL; 
+0

我這樣做,我仍然沒有得到任何權力的消息。可能是什麼問題。我有多個分佈在不同監視器上的OpenGL窗口,嘗試過這種方法但沒有結果.... – alap

+0

仔細檢查我鏈接到的文檔。它看起來已經更新,說GUID_SESSION_DISPLAY_STATUS在Windows 8或Server 2012(及更高版本)中可用,但不適用於早期版本的操作系統。 –

+0

對於較老的操作系統,有GUID_MONITOR_POWER_ON,但只會告訴您主監視器。 –

相關問題