4

Java の Robot クラスに問題があります。フルスクリーン ゲームを実行すると、動作しないことがあります。これが私のコードです:

Toolkit tlkt = Toolkit.getDefaultToolkit();
Robot bot = new Robot();
while(true) {
    Thread.sleep(3000);
    tlkt.beep(); //make sure that program still runs
    bot.mousePress(MouseEvent.BUTTON1_DOWN_MASK);
    bot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK);
}

3秒ごとに左クリックしてビープ音を鳴らしたい。正常に動作しますが、フルスクリーン アプリケーションを実行すると、ビープ音だけが鳴り、クリックしません。

すでに Robot 宣言をループに移動しようとしたため、毎回新しい Robot が作成されますが、成功しません。

私は 5 つの異なるゲームで試しましたが、そのうちの 3 つはフルスクリーンでも問題なく動作しましたが、2 では動作せず、ビープ音だけが鳴りました。何か助けはありますか?

4

1 に答える 1

4

Windowsマシンを使用しているとすると、呼び出しのjava.awt.Robot呼び出しはにリダイレクトされsun.awt.windows.WRobotPeer、はでネイティブコードを呼び出しますawt_Robot.cpp。ここでソースコードを確認できawt_Robot.cppます:http ://www.koders.com/cpp/fidFFE004659A9CAB3DA2B3302C457E624AF6F3EEDF.aspx?s = GetDIBits#L232

ここでは、マウスイベントがwin32呼び出しmouse_event(...)(winuser.hで定義)で実現されていることがわかります。

したがって、ロボットのマウスクリック呼び出しは、の制限によって制限されますmouse_event(...)

次に、これを少し調べてみると、一部のゲームにはある種のマクロ保護メカニズムがあることがわかります。ルーティングされたメソッドを無視mouse_event(...)し、ドライバーと直接通信します。たとえば、Hackshieldは、このような保護メカニズムを多くのゲームに提供します。したがって、これが一部のゲームがロボットのマウスクリックを受け取らない理由です。

于 2012-05-23T17:33:59.130 に答える