私は、オンライン ゲームで夜間にキャラクターのアクションを自動化する Java アプリケーションを作成しています (具体的には、ファイナル ファンタジー XI で魚を捕まえます)。このアプリは、ユーザーのキーボード入力をエミュレートするためと、画面の特定の部分での色の変化を検出するために、Java の Robot クラスを多用します。また、マルチスレッドとスイング GUI も使用します。
ゲームを実行せずにスクリーンショットを使用してアプリの応答をメモ帳にトリガーするだけでテストすると、アプリケーションは完全に動作するようです。しかし、実際に FFXI を起動してプログラムを起動すると、何らかの理由で、キーボードとマウスのすべての操作が完全に機能しなくなります。プログラムは引き続き実行されており、Robot クラスは引き続きピクセルの色を読み取ることができます。しかし、Robot.keyPress、Robot.keyRelease、Robot.mouseMove、Robot.mousePress、および Robot.mouseRelease はすべて何もしません。それは最も奇妙なことです-テストするために、文字を入力し続ける単純なループを作成し、メモ帳に焦点を合わせました。その後、ゲームを開始し、メモ帳の焦点を合わせ直しましたが、何もしませんでした。その後、ゲームを終了すると、すぐに再び機能し始めます。
特定のソフトウェアがJavaの特定の機能を停止させる、このようなものに遭遇した人はいますか?
また、これをより興味深いものにするために、昨年、同じクラスとプログラミング手法を使用して、ゲーム内のパーティーが戦っているときに自動的に回復する非常によく似たプログラムを作成しました。昨年、このプログラムは完璧に機能しました。これらの問題に遭遇した後、私はその古いプログラムを掘り起こし、何も変更せずに実行したところ、同じ問題を抱えていることがわかりました。現在と動作していたときの唯一の違いは、Windows Vista を実行していて、現在は Windows 7 を実行しており、いくつかの新しい Java バージョンと FFXI バージョンがリリースされていることです。
一体何が起こっているのですか?(誰かが私のソース コードを表示する必要がある場合は、mikejturley@gmail.com に電子メールを送信してください。私は秘密にしています。)