4

私はこれが起こることを望みます:

  1. Java プログラムを開始する
  2. 私のJavaプログラムはnotepad.exeを起動します
  3. メモ帳に文字を入力すると、Java プログラムが反応して文字を出力するはずです。

要するに、別のプロセスのキーイベントリスナーを作成することは可能ですか? Java プログラムにはフォーカスがありません。

それが不可能な場合は、Java Swing ウィンドウとメモ帳プロセスの間でフォーカスを変更できるようにしたいと考えています。例えば:

A) Java プログラムにフォーカスがあり (小さなスイング ウィンドウ)、文字「A」を入力します
B) メモ帳にすばやくフォーカスが移され、そこに文字 A が入力されます (たとえば、Robot クラスを使用)
C) Java プログラムが再びフォーカスを取得します


システムトレイにあるJavaプログラムのキーボードフックの作成で与えられた答えを引用する

そのため、キーボード フックを作成するのは見た目ほど簡単ではありません。Java は、セキュリティのためにシステム イベントと対話する直接的な方法を提供していません。JVM 、システムのメモリ、および Java フレームワークの移植性に関する深刻な問題につながる可能性があるためです。

グローバル キーボード フックを作成するには、次の 4 つの方法があります。

  1. JNI / JNAを学びます.JNIよりもはるかに簡単なので、私はJNAを好みます。どちらの場合も、.dllファイルを処理する必要があります。
  2. あなたが言ったように、いくつかの問題を引き起こす JIntellitype を使用してください。
  3. Sergei Biletnikov によるエレガントなソリューションhttp://biletnikov-dev.blogspot.com/2009/09/global-hotkeys-for-Java-applications_25.html
  4. Java を無視し、Autoit V3 を試してください (100% 確信があるわけではありませんが、Autoit から Java アプリにシグナル/イベントを送信できるので、Autoit はグローバル キー ストロークをキャッチするブリッジとして機能します)。

良いチュートリアルである番号 3 を使用します。リンクが 404 になっている場合、プロジェクトのソースがまだアップしている可能性があります: gigapeta.com/dl/1917618aba749a

4

1 に答える 1

2

提示されたソリューション#1で:

JNI / JNAを学びます.JNIよりもはるかに簡単なので、私はJNAを好みます。どちらの場合も、.dllファイルを処理する必要があります。

このstackoverflowスレッドを見てください:

Windows の JNA キーボード フック

JNAキーフックを示すコピー/貼り付け可能なコードがあります。この例を機能させるには、JNA 依存関係をhttp://jna.java.net/からダウンロードする必要があります。ばかげた DLL をいじる必要さえありません。

さらに、このライブラリを試してみることをお勧めします。経験はありませんが、Google 検索で「Java キーボード フック」を検索すると表示されました。キーストロークを傍受するという目標を達成しているようです。

http://code.google.com/p/jnativehook/

現在の「アクティブなウィンドウ」が何であるかを確認するには、追加のネイティブ コードが必要になることに注意してください。アクティブなウィンドウが「Notepad.exe」と一致する場合は、ネイティブ キー イベントを記録する必要があります。

幸運を!

于 2012-05-20T01:22:06.443 に答える