2016-05-04 5 views
-1

スリープモードを中断/中断するWindowsデスクトッププログラム(Tweetz)があります。プログラムの性質は、つぶやきを監視し、つぶやきが到着するとUIを更新することです。私は、ネットワーク活動やUIの更新がスリープモードを妨げている/中断していると思われます。Windowsデスクトップアプリケーションがスリープを中断しないようにする

Windowsにアプリケーションのスリープを防ぐべきではないことを伝えるシステムAPIはありますか?

+0

あなたはこれを間違った方法で探しています。あなたのプログラムに何か問題があります。それが何であるかを試して修正してください。あなたが探している関数呼び出しが存在しません。必ずしも必要ではないからです。 –

+1

* "スリープを防止してはならないことをWindowsに知らせるシステムAPIはありますか?" * - いいえ、逆のこともあります:[SetThreadExecutionState](https://msdn.microsoft.com/en-us/library) /windows/desktop/aa373208.aspx)。おそらく、アプリケーションはこれを*「機能」*として使用します。 UIの更新によってシステムがスリープ状態になるのを防ぐことはできませんが、ネットワークトラフィックが発生する可能性があります([システムスリープ基準](https://msdn.microsoft.com/en-us/library/windows/desktop/aa373233.aspx)参照)。 – IInspectable

+0

これは、眠っている人を監視するネットワークトラフィックの可能性が高いです。キャッチのようです22。回避策はありますか? –

答えて

1

私は次のアプローチを提案します。 WindowsサービスでTwitterモニターをコーディングし、表示する必要のあるメッセージをバッファします。これらのメッセージについては、システムがスリープモードになっているかどうか、またはデスクトップがロックされているかどうか(アプリケーションの仕様に従って)を確認してください。デスクトップアプリケーションとの通信メカニズムを設定し、必要に応じてメッセージを転送します。サービスはあなたのシステムがスリープ状態になるのを防ぐものではありません。SERVICE_ACCEPT_SESSIONCHANGEを使用してSetServiceStatus()でセッション状態の変化を監視できます。 OnSessionChangeイベントを使用することもできます。

1

おそらく、Windowsは正常にスリープしますが、ネットワークトラフィックを送信することによってアプリケーションがすぐに起動します。その場合は、WM_POWERBROADCASTメッセージ、特にPBT_APMQUERYSUSPENDPBT_APMRESUMEAUTOMATICを処理できます。サスペンド時にネットワークトラフィックを停止し、再開時に再起動します。

+0

睡眠を1分間設定し、睡眠を待って、つぶやきが入り、システムが目を覚ます。また、ネットワークを切断すると、システムが眠っていることがわかりました。決定的なテストではありませんが、ネットワークアクティビティの問題を指摘しています。私はあなたが提案するようにします。少なくともそれは目を覚まさないでしょう。 –

関連する問題