コンピューターが省電力モードに入ったタイミングを検出しようとしています。問題は、このプログラムを Windows XP と 7 の両方で実行する必要があることです。RegisterPowerSettingNotification は Vista 以降でのみ機能するため、オプションではありません。SPI_GETSCREENSAVERRUNNING で SystemParametersInfo を使用してみましたが、コンピューターが実際に設定されている省電力モードでは機能しません。他の提案はありますか?
質問する
278 次
1 に答える
1
私自身の質問に答えるには、スクリーンセーバーのタイムアウトと最後のユーザー入力を取得し、2 つを比較するのが最善の方法のようです。
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 ミリ秒で発生するため、これは正確な時間測定方法ではありませんが、私の目的には十分です。
于 2014-03-04T14:34:20.737 に答える