0

バックグラウンドで実行される Java プログラムで Java クライアントが開いているかどうかを知る必要があります。Java では、同じ仮想マシンで実行されていない他のウィンドウを表示できません。追跡したいJavaクライアントを開くJavaプログラムを作成するとうまくいくと思いますが、うまくいきませんでした(たくさん試しました)。私の他のオプションは、Java ロボットを使用して画面のスクリーンショットを撮り、探しているクライアントのピクセルと一致するまでピクセル情報の検索を繰り返すことです。


クライアントは私が直接操作してはならないプログラムであり、私はそれを書きませんでした。簡単にするために、クライアントが赤と緑の間で色を切り替える領域を持っているとしましょう。赤は問題を意味し、緑は問題がないことを意味します。
バックグラウンドで実行されているプログラムは、クライアントをトリガー メカニズムとして使用します。つまり、クライアントが赤を示している場合です。私は何かをするべきではなく、緑色を示している場合はそうすべきです (したがって、クライアントの特定の場所の色が赤かどうかを確認するだけで済みます。

比較:

ロボット:
-実装は簡単ですか?
- 私がユーザーの情報を盗んでいないという確信をユーザーに与えます。

同じ VM で両方のプログラムを
起動 し ます
。再び見つけるために。 悪い例: ロボット: - 反復には時間がかかる場合があります - javaclient が移動するたびに反復する必要があります。 同じ VM で両方のプログラムを開始します。








-プログラムは、より多くの構成を必要とし、他の「もの」をインストールする必要があります(簡単で高速に使用できるものが必要です)

効率やその他のオプションについて気軽にコメントしたり、これら 2 つのオプションの断片を教えてください。

ありがとうございます (可能性のあるユーザーは Windows 以外の OS を実行している可能性があるため、C/C++ の代わりに Java を試し続けることにしました)

4

1 に答える 1

1

スクリーンショットを撮る代わりに、プロセスまたはウィンドウのリストを取得してみませんか? JNI または JNA を使用する Windows では、「EnumWindows」または「EnumProcesses」を使用できます。Linux の場合、「ps」はプロセスのリストを取得します。または、クライアント/サーバー モデルを使用して、クライアントがサーバーに「ping」するようにすることもできます。

于 2011-12-02T11:42:41.933 に答える