1

コンピューターが省電力モードに入ったタイミングを検出しようとしています。問題は、このプログラムを Windows XP と 7 の両方で実行する必要があることです。RegisterPowerSettingNotification は Vista 以降でのみ機能するため、オプションではありません。SPI_GETSCREENSAVERRUNNING で SystemParametersInfo を使用してみましたが、コンピューターが実際に設定されている省電力モードでは機能しません。他の提案はありますか?

4

1 に答える 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 に答える