ユーザーが PC で開いたプログラムの名前と時間を記録する必要があるデスクトップ分析アプリケーションを実装しています。これは、ユーザーがログオンしたときに開始され、UI なしで実行される C# (WPF) アプリケーションです。Word や IE などのプログラムの場合、表示しているドキュメントや URL も取得します。
現在、次のような実用的なソリューションがあります。
マウス ダウン用の Windows フックをインストールします。そのイベントが発生したら、p-Invoke を使用して "GetForegroundWindow" を実行し、ウィンドウ ハンドルを使用して "GetWindowThreadProcessId" を実行します。ProcessId を使用すると、名前、開始時刻、および引数の開始リストを含む System.Diagnostics.Process オブジェクトを取得できます。履歴リストを維持しているので、このプロセス ID とウィンドウ ハンドルの組み合わせが以前に記録されていない場合にのみ、追跡エントリを書き込みます。
この解決策は問題なく機能しますが、マウス フックが必要です。このマウス フックは、通知がなくても Windows によってドロップされる可能性があり、まだフックされているかどうかを確認する機能もありません。言うまでもなく、この実装はハックのようです。
より簡単なアプローチがあれば、アドバイスしてください。
ありがとう。