53

外部プログラムで何かをクリックするために、Java でマウス クリックを実行しようとしています。これを行うにはjava.awt.robot、と次のコードを使用しています。

Robot bot = new Robot();
int mask = InputEvent.MOUSE_BUTTON1_DOWN;
bot.mouseMove(x, y);           
bot.mousePress(mask);     
bot.mouseRelease(mask);

これが問題です。外部プログラムは、このクリックがコンピューターによって生成されたものであり、人間が生成したものではないことを検出できるため、このクリックを拒否します。

私はすでにマウスを自然に動かそうとしましたが、何の効果もありませんでした。私の推測では、キーボードの状態などをリッスンし、それから、クリックがコンピューターで生成されたものであることがわかります。

すべてのキーボード/マウスの状態を通常のマウス クリックと同じように設定するにはどうすればよいですか?

4

6 に答える 6

11

Linuxで動作します。おそらく、それを許可するために Windows で変更できるシステム設定があります。

jcomeau@aspire:/tmp$ cat test.java; javac test.java; java test
import java.awt.event.*;
import java.awt.Robot;
public class test {
 public static void main(String args[]) {
  Robot bot = null;
  try {
   bot = new Robot();
  } catch (Exception failed) {
   System.err.println("Failed instantiating Robot: " + failed);
  }
  int mask = InputEvent.BUTTON1_DOWN_MASK;
  bot.mouseMove(100, 100);
  bot.mousePress(mask);
  bot.mouseRelease(mask);
 }
}

あなたのバージョンのJavaは私InputEvent.MOUSE_BUTTON1_DOWNのものと同じだと思いInputEvent.BUTTON1_DOWN_MASKます。1.6を使用しています。

そうしないと、それが問題になる可能性があります。プログラムを実行したときにChrome ブラウザがhttp://docs.oracle.com/javase/7/docs/api/java/awt/Robot.htmlに開いていたので、それが機能したことがわかります。Debian.org に変更されました。これはブックマーク バーの (100, 100) のリンクだったからです。

[今日考えた後に追加] よりスムーズなマウスの動きをシミュレートして、リスニング プログラムをだます必要があるかもしれません。ここで答えを参照してください: Java を使用して画面全体でマウスをスムーズに移動する方法は?

于 2013-10-05T08:03:00.630 に答える
4

あらゆる点で最も可能性が高いのは、クリックが「拒否」されている理由について誤解しているということです。一部のプログラムが人間かどうかを判断しようとしているのはなぜだと思いますか? Robot クラス (よく使用されています) は、オペレーティング システムがユーザーのクリックを区別できないというメッセージを送信する必要があります。

于 2013-10-10T00:56:07.300 に答える
1

一部のアプリケーションは、低 OS レベルでクリック ソースを検出する場合があります。そのようなハックが本当に必要な場合は、仮想マシンのウィンドウでターゲット アプリを実行し、ホスト OS で claker を実行するだけで十分です。

于 2014-11-23T01:17:44.627 に答える
1

ジョブを実行する単純な AutoIt スクリプトを作成し、それを実行可能ファイルとしてコンパイルして、そこでシステム コールを実行することができます。

au3 スクリプトで:

; how to use: MouseClick ( "button" [, x, y [, clicks = 1 [, speed = 10]]] )
MouseClick ( "left" , $CmdLine[1], $CmdLine[1] )

au3 フォルダで aut2exe を見つけるか、[スタート] メニューで [スクリプトを .exe にコンパイル] を見つけて、実行可能ファイルを作成します。

Java クラス呼び出しで:

Runtime.getRuntime().exec(
    new String[]{
        "yourscript.exe", 
        String.valueOf(mypoint.x),
        String.valueOf(mypoint.y)}
);

AutoIt はあたかも人間であるかのように動作し、機械としては検出されません。

ここで AutoIt を見つけてください: https://www.autoitscript.com/

于 2016-06-03T16:45:51.627 に答える