アプリケーションでのみ(「アプリケーションインスタンス」ごとに)ユーザーアイドル検出が必要です。セッション固有のユーザー入力であるため、GetLastInputInfo
を使用できません。
GetLastInputInfoは、実行中のすべてのセッションにわたってシステム全体のユーザー入力情報を提供するわけではありません。むしろ、GetLastInputInfoは、関数を呼び出したセッションのみのセッション固有のユーザー入力情報を提供します。
助言がありますか ?
アプリケーションでのみ(「アプリケーションインスタンス」ごとに)ユーザーアイドル検出が必要です。セッション固有のユーザー入力であるため、GetLastInputInfo
を使用できません。
GetLastInputInfoは、実行中のすべてのセッションにわたってシステム全体のユーザー入力情報を提供するわけではありません。むしろ、GetLastInputInfoは、関数を呼び出したセッションのみのセッション固有のユーザー入力情報を提供します。
助言がありますか ?
アイドル時間を検出したいと思いますが、アプリケーションがアクティブな場合のみです。次に、アプリケーションがアクティブであることの意味を正確に定義する必要があります。アプリケーションがアクティブな場合(独自の定義による)、定期的にGetLastInputInfoを呼び出して、アプリケーションがアクティブなときのアプリケーションのアイドル時間を決定できます(たとえば、ある種のタイマーを使用)。
Windowsにはフォアグラウンドウィンドウの概念があり、 GetForegroundWindowを使用して現在のフォアグラウンドウィンドウを取得できます。GetWindowThreadProcessIdを使用して、フォアグラウンドウィンドウを所有するプロセスのプロセスIDを見つけることができます。そのプロセスIDがプロセスIDである場合、アプリケーションに複数のウィンドウがある場合でも、フォアグラウンドプロセスであることがわかります。アイドル時間を確認する必要があるのと同じように、この検出を定期的に実行する必要があります。
GetLastInputInfo
セッションに関する情報のみを提供することについて心配する必要はありません。複数のユーザーが同じWindowsコンピューターにログオンしている場合、それぞれに独自のセッションがありますが、別のユーザーがアイドル状態であるか、セッションで無効になっていない場合でも、アプリケーションのユーザーがアイドル状態であるかどうかの検出方法に影響はありません。
Application.AddMessageFilter
ユーザーの操作(マウス、キーボード、メニューのアクティブ化など)を表すメッセージを使用して監視できます。
これがWindowsフォームアプリケーションの場合は、アイドルイベントハンドラーを作成して、Application.Idleイベントをサブスクライブできます。アプリケーションが処理を終了し、アイドル状態になりそうになると、通知が届きます。