2014-02-27 75 views
1

我試圖檢測計算機何時進入省電模式。問題是,這個程序必須在Windows XP和7上運行。RegisterPowerSettingNotification只適用於Vista和更新的版本,所以這不是一個選項。我也嘗試使用SPI_GETSCREENSAVERRUNNING使用SystemParametersInfo,但這對於節電模式不起作用,這是電腦實際設置的功能。還有其他建議嗎?檢測何時處於省電模式

回答

1

要回答我的問題,抓住了屏幕超時和最後的用戶輸入,並比較這兩個似乎是最好的辦法:

int screenTimeout; 
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, NULL, &screenTimeout, SPIF_UPDATEINIFILE); 
LASTINPUTINFO lastInput; 
lastInput.cbSize = sizeof(LASTINPUTINFO); 
GetLastInputInfo(&lastInput); 
DWORD ticks = GetTickCount(); 
int lastInputTime = (ticks-lastInput.dwTime)/1000; 

GetLastInputInfo自上次用戶輸入返回蜱的數量。根據MSDN,滴答發生在10到16毫秒之間,所以這不是一種精確的時間測量方式,但對我的目的來說已經足夠了。