2012-02-13 6 views
1

GetForegroundWindow()関数を使用してデスクトップ上にフォアグラウンドウィンドウを検出しました。各アプリケーションがフォアグラウンドでどれくらいの時間を費やしているかを追跡し、フォアグラウンドで再開するたびにデータベースで更新する必要があります。 ウィンドウをフォーカスしていないときにカウンタを設定するか、見つけ出すAPIはありますか?フォアグラウンドアプリケーションがアクティブである時間を追跡する方法

答えて

1

SetWindowsHookExによってサポートされているWH_CBTフックタイプがあります。これは、ユーザが別のウィンドウまたはアプリケーションに切り替えるたびに発生します。 How to install Windows hooks from C#

ただし、完全精度を必要としない場合は、GetForegroundWindow()を1秒に1回呼び出して、返されたHWNDの数値が変更されているかどうかを確認する方がずっと簡単です。半分の秒間隔を気にする必要のないアクティビティトラッカーアプリのようなものでは、このテクニックはより良い選択です。

ヒント:何があるかどう

  • GetForegroundWindow()は(あなたがいることをフィルタリングする必要があるかもしれないので、デスクトップやタスクバーまたは浮動ウィジェットすることができます)現在フォーカスがあるウィンドウのハンドル、またはゼロのハンドルを返しません現在フォーカスされているウィンドウ。
  • 超高速ですので、1秒に数十回または数百回呼び出すことに害はありません。
  • ウィンドウハンドルの値は、(現在のユーザーセッションでは)一意であり、異なるアプリケーションに属していても異なります。また、破棄されたハンドルがほとんど直ちに再割り当てされないように割り当てられます。
0

自分のアプリケーションが心配な場合は、Activate/Focus/LostFocus/DeActivateイベントを処理できます。すべてのウィンドウを監視する必要がある場合は、Windowsフックを使用する必要があります。一つの記事here

関連する問題