6

私の目標は、Java を使用してシステム監視アプリケーションを作成することです。ユーザーがいつ Windows PC でアクティビティを行っているかを知りたいです。結果は次のようになります。

8:00 - 8:15 アクティビティ

9:12 - 10:29 アクティビティ

12:24 - 15:34 アクティビティ

他の情報 (どのキーが押されたか、使用されたアプリケーションなど) には興味がありません。ユーザー アクティビティのみ。

これはJavaでも可能ですか?Java アプリケーションをサービスとして実行する予定です。しかし、ユーザーがコンピューターを使用したときにイベントを取得することに関しては、どこから始めればよいかわかりません。


[編集] さらなる説明: アクティビティの詳細には興味がありません。ユーザーがマウスを動かしたり、キーを押したりしたことだけに興味があります。どこかのアプリケーションでキーが押されたことがわかっている限り、どのキーが押されたかは気にしません。また、キーを押したりマウスを動かしたりする以外のアクティビティも気にしません (たとえば、USB キーが USB ポートに挿入されているかどうかには関心がありません)。

4

4 に答える 4

2

サービスから直接ユーザー アクティビティを監視することはできません。サービスはユーザーのアクティビティとは別のウィンドウ ステーションで実行されるため、そのアクティビティに接続する方法はありません (C で記述する必要があるフィルター ドライバーを使用する場合を除く)。

そのため、ユーザーのデスクトップで実行され、キーボードとマウスのアクティビティに接続するクライアント アプリケーションが必要になります。これは、 JNI を使用して Windows API SetWindowsHookEx (低レベルのキーボードおよびマウス フック用) を 2 回呼び出すことで実現できます。アクティビティを監視するには、アプリケーションはメッセージのキーボードとマウスのフックを処理する必要があります。

レジストリの Run キーにエントリを追加して自動起動としてアプリケーションを起動するか、サービス モニターでセッション ログオン イベントを監視し、そこからアプリケーションを起動することができます。その後、ユーザー セッション アプリケーションは、情報自体を処理するか、パイプまたはソケットを介してサービスに渡すことができます。

于 2009-03-23T17:33:00.437 に答える
1

「ユーザーアクティビティ」とは正確にはどういう意味ですか?特に「キーが押された、アプリケーションが使用されたなど」と言うように、解決策を考え始めるには、最初にその用語を正確に定義する必要があります。活動ではありません。

于 2009-03-20T17:56:09.297 に答える
1

このSWT Win32 Extensionを試すことができます。Windows で Java からキーボードとマウスのフックを設定できます。

于 2009-05-11T16:33:20.697 に答える
0

これは Java プラットフォームでは直接サポートされていません

.NET の代替案を検討すると、はるかに簡単になります。

.net でグローバル ユーザー入力をキャプチャするを検索します。

于 2009-03-20T19:11:46.557 に答える