GetForegroundWindow()関数を使用してデスクトップ上にフォアグラウンドウィンドウを検出しました。各アプリケーションがフォアグラウンドでどれくらいの時間を費やしているかを追跡し、フォアグラウンドで再開するたびにデータベースで更新する必要があります。 ウィンドウをフォーカスしていないときにカウンタを設定するか、見つけ出すAPIはありますか?フォアグラウンドアプリケーションがアクティブである時間を追跡する方法
1
A
答えて
1
SetWindowsHookEx
によってサポートされているWH_CBT
フックタイプがあります。これは、ユーザが別のウィンドウまたはアプリケーションに切り替えるたびに発生します。 How to install Windows hooks from C#。
ただし、完全精度を必要としない場合は、GetForegroundWindow()
を1秒に1回呼び出して、返されたHWND
の数値が変更されているかどうかを確認する方がずっと簡単です。半分の秒間隔を気にする必要のないアクティビティトラッカーアプリのようなものでは、このテクニックはより良い選択です。
ヒント:何があるかどう
GetForegroundWindow()
は(あなたがいることをフィルタリングする必要があるかもしれないので、デスクトップやタスクバーまたは浮動ウィジェットすることができます)現在フォーカスがあるウィンドウのハンドル、またはゼロのハンドルを返しません現在フォーカスされているウィンドウ。- 超高速ですので、1秒に数十回または数百回呼び出すことに害はありません。
- ウィンドウハンドルの値は、(現在のユーザーセッションでは)一意であり、異なるアプリケーションに属していても異なります。また、破棄されたハンドルがほとんど直ちに再割り当てされないように割り当てられます。
0
自分のアプリケーションが心配な場合は、Activate/Focus/LostFocus/DeActivateイベントを処理できます。すべてのウィンドウを監視する必要がある場合は、Windowsフックを使用する必要があります。一つの記事here。
関連する問題
- 1. ウェブアプリケーションのイベント時間を追跡する
- 2. Game of Life:アクティブなセルを追跡する方法
- 3. nginx-sflow-moduleによる応答時間の追跡方法
- 4. Java GUIアプリケーションで使用される時間を追跡する方法は?
- 5. vs 2010でのデバッグにかかった時間を追跡する方法は?
- 6. PHP関数/コードの追跡方法処理時間
- 7. 追跡の方法1ページのウェブサイトの訪問時間
- 8. 追跡する方法EXC_BAD_ACESS
- 9. VB6でイベントを追跡する方法
- 10. touchesBeganとtouchesEnded:の間で一貫性のある方法でタッチを追跡する方法
- 11. Harvest API-PHP-特定の時間枠の合計時間を追跡する
- 12. 作業日/時間を追跡するタイムシートプログラム?
- 13. addref()とrelease()を追跡するコンパイル時間オプション?
- 14. 電話の通話時間を追跡する
- 15. ユーザー数を追跡する方法
- 16. インテントを追跡する方法
- 17. 追跡する方法追跡後の画像ターゲットモデルオブジェクトが失われた?
- 18. 複数のcelerydプロセス間で失効したタスクを追跡する方法
- 19. Webアプリケーションで最後にアクティブな時間を実装する方法
- 20. ビルド時間を短縮する方法/ XCodeでコンパイル時間を短縮する方法はありますか?
- 21. 問題追跡ビューに時間トラッキンググラフが表示されない
- 22. アプリケーションとアクティブ時間
- 23. AngularJS:ウェブアプリで費やされた時間を追跡し、特定の時間にイベントをトリガーする
- 24. アクティブになっているディスプレイ更新時間を制御する方法
- 25. jQueryで日付に時間を追加する方法
- 26. PHP:ユーザがオンラインである場合の最も効率的な追跡方法
- 27. selenium2を使用して通話数と各通話時間を追跡する方法
- 28. mclapplyで進行状況を追跡する方法はありますか?
- 29. どの検索バーがアクティブであるかを知る方法?
- 30. C#アプリは、その実行時間を追跡しますか?