2011-02-11 7 views
6

Windowsは、ユーザーがキーボードまたはマウスに触れるたびにIDLE時間をリセットします。私のアプリケーションは、特定の瞬間にIDLE時間をリセットする必要がありますが、私はこれをプログラムで行う方法を理解することはできません。プログラムでWindows XP IDLE時間をリセットする

以下は、VB、C#またはQT4を使用してIDLE時間をリセットしません。
- プログラムによるマウスの移動/クリック。
- プログラムによるキーストローク。
何らかの形でWindowsは、これらのアクションがシミュレートされていることを認識しています。

IDLE時間をリセットするにはどうすればよいですか?どんな考えも大歓迎です!

+0

なぜアイドル時間をリセットする必要がありますか? – Anders

+4

すでに[飲酒技術](http://www.goozex.com/community/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/7/1007.drinking_5F00_bird.jpg)を試してみましたか? – Trinidad

+0

[keybd_event](http://msdn.microsoft.com/en-us/library/ms646304.aspx)を試しましたか? – Trinidad

答えて

4

SetThreadExecutionState()を使用してください。 ES_SYSTEM_REQUIREDオプション(2)は、システムアイドルタイマーをリセットします。必要な宣言については、pinvoke.netをご覧ください。

+0

私はこれがアンデルスのことよりも具体的に答えていると思います。 – Earlz

+0

@Earlz:まあ、彼はリセットしたいと思っていましたか、どのアイドルタイマー(システムまたはディスプレイ)を指定していませんでした。たとえば、cd/dvdバーナープログラムはES_SYSTEM_REQUIREDを使い、プログラムのような電源ポイントはES_DISPLAY_REQUIREDを指定します。 – Anders

3

たとえば、ディスプレイをオンにしておく必要がある場合は、SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_CONTINUOUS)とします。スクリーンセーバーを無効にするには(ビスタ+上では動作しません)

をES_USER_PRESENTフラグを使用することができ2000/XP上で

、あなたはWM_SYSCOMMANDのSC_SCREENSAVEを扱うことができます(あなたが前面のウィンドウにする必要があり、そうでない場合てSystemParametersInfoを使用)

1

原則として、SetThreadExecutionState()は必要な処理を行う必要があります。しかし、現代のいくつかのWindowsでは、いくつかの状況ではシステムの必要なフラグで動作しないことが分かっています。申し訳ありませんが、私は正確な詳細を覚えていません。

フォールバックとして、ヌルマウス移動メッセージなどでSendInput()を呼び出すことで、一部の入力を偽装できます。私の推測では、SendMessageまたはPostMessageを呼び出したために入力偽造が失敗したということです。

関連する問題