1
我試圖檢測計算機何時進入省電模式。問題是,這個程序必須在Windows XP和7上運行。RegisterPowerSettingNotification只適用於Vista和更新的版本,所以這不是一個選項。我也嘗試使用SPI_GETSCREENSAVERRUNNING使用SystemParametersInfo,但這對於節電模式不起作用,這是電腦實際設置的功能。還有其他建議嗎?檢測何時處於省電模式
我試圖檢測計算機何時進入省電模式。問題是,這個程序必須在Windows XP和7上運行。RegisterPowerSettingNotification只適用於Vista和更新的版本,所以這不是一個選項。我也嘗試使用SPI_GETSCREENSAVERRUNNING使用SystemParametersInfo,但這對於節電模式不起作用,這是電腦實際設置的功能。還有其他建議嗎?檢測何時處於省電模式
要回答我的問題,抓住了屏幕超時和最後的用戶輸入,並比較這兩個似乎是最好的辦法:
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毫秒之間,所以這不是一種精確的時間測量方式,但對我的目的來說已經足夠了。