1

WinAPIでC++を使用してコーディングしており、コンピューターを休止状態にするために、次の呼び出しを使用します。

SetSuspendState(TRUE, NULL, FALSE);

しかし、コンピュータに大きなRAMアレイがインストールされている場合、休止状態は失敗します。

だから私は疑問に思っていました、休止状態が失敗した場合、Windowsは通知を送信しますか?そうでない場合は、休止状態のリクエストが失敗したかどうかを確認する方法はありますか?

4

3 に答える 3

1

冬眠を直接検出する方法がないようです[訂正:これについては間違っていました。Fowlの回答を参照してください。] Windows8まで(PowerRegisterSuspendResumeNotificationを参照)。しかし、アイドルループでシステム時刻を監視できると思います。時間が突然前に進んだ場合は、正常に休止状態になっています(そして再開しました!)。これが1分以内に発生しなかった場合は、リクエストが失敗した可能性があります。GetTickCount64関数を使用できると思います。この関数は、システム時間の変更の影響を受けませんが、睡眠に費やす時間のバイアスが含まれているようです。これが機能しない場合は、GetSystemTimeAsFileTimeを使用するだけでなく、 WM_TIMECHANGEメッセージも監視してください。

また、休止状態が失敗したときにWindowsがイベントログに何かを書き込むかどうかを問題のシステムで確認することもできます。その場合、アプリケーションは関連するエントリのイベントログを監視できます。これは、より信頼性の高いアプローチになります。

于 2012-07-07T12:01:31.267 に答える
1

( RegisterPowerSettingNotification ) に登録し、 WM_POWERBROADCASTをリッスンしてから、イベント ログを調べて詳細を取得します。

複数の OS バージョンを処理したい場合は少し面倒ですが、実行可能です。

于 2012-07-09T03:47:11.387 に答える
0

うーん...多分私はここでポイントを逃していますが、ドキュメントによると、失敗した場合はFALSEを返すはずです。あなたの場合、それはまだTRUEを返しますか?

于 2012-07-06T22:13:31.313 に答える