2009-08-26 8 views
0

私のアプリケーションでは、長時間のタスクの実行が完了すると、Win32 SetSuspendState() APIを使用してシステムサスペンドまたはハイバネーションがトリガーされます。Vistaでサスペンドを要求しますが、他のアプリケーションのキャンセルを許可します。

APIは、システムがすぐに中断するかどうか、または他のアプリに中断をキャンセルさせるチャンスを最初にPBT_APMQUERYSUSPENDブロードキャストするかどうかを決定するパラメータ「ForceCritical」を受け入れます。私のアプリはこれを使ってMedia Playerのような他のアプリとうまくやりとりするので、音楽や何かを聞いていると一時停止しません。

何らかの理由で、Vistaから始めて、MS have changed things so this parameter is ignoredだからSetSuspendStateが直ちに中断され、他のアプリケーションはそれを停止する機会がありません。

Vistaで再び「礼儀正しい」動作を得る方法を知っている人はいますか?

答えて

1

MSDNは

は、Windows Vistaでの低電力状態に移行からシステムを防ぐために言って、アプリケーションは、それが使用されているシステムに通知するためにSetThreadExecutionStateを呼び出す必要があります

私は希望WMPはこれをやっていると思うが、古いアプリはそうではない。 WM_POWERBROADCAST:PBT_APMQUERYSUSPENDメッセージをすべてのトップレベルウィンドウに送信し、戻り値をチェックすることで、これをエミュレートすることができます(ハングアップしたアプリケーションがアプリケーションをハングしないようにタイムアウトでメッセージを送信してください)

関連する問題