0

マウスを動かして、アプリケーションの外でマウス クリックをシミュレートしたいと考えています。

マウス、sendinput、BotSuite や Input Simulator を含む多数のライブラリを動かすあらゆる方法を試しました。

アプリケーションがフォーカスを失うたびに、マウスを動かしたり、クリックしたりしていません。マウスを動かしてアプリケーション内をクリックすることはできますが、フォーカスを失うとすぐに完全に機能しなくなります。フォーカスが合っていても、アプリケーション以外のものをクリックすることはできません。

何故ですか?

BotSuite を使用したスニペットを次に示します。その前にプロセスを開始し、それを焦点にしています。

        Bitmap CapturedScreen = ScreenShot.Create(LauncherHandle);
        Bitmap bmpRefPic = new Bitmap("launchbutton.png");
        ImageData refpic = new ImageData(bmpRefPic);
        ImageData source = new ImageData(CapturedScreen);

        List<Rectangle> found = new List<Rectangle>();

        found = Template.AllImages(source, refpic, 124);

        Mouse.MoveRelativeToWindow(LauncherHandle, found[0].X + 50, found[0].Y + 50, true, 100);

        Mouse.LeftClick();

これは機能していません。ただし、事前に自分のアプリケーションで SetForegroundWindow を実行すると、Mouse.Move コマンドが機能します。クリックしても、アプリケーションの境界の外では機能しません。

4

2 に答える 2

2

SendInput は、メッセージをフォアグラウンド ウィンドウのメッセージ キューに入れます。したがって、アプリケーションがフォアグラウンド ウィンドウの場合、SendInput はメッセージをアプリケーションのメッセージ キューに配置します。

別のアプリケーションで入力を偽造するには、次のいずれかを行う必要があります。

  1. フォアグラウンド ウィンドウを他のアプリケーションのウィンドウにします。
  2. PostMessage を使用して、入力メッセージをターゲット ウィンドウに直接ポストします。

オプション 2 は、入力メッセージの処理が非常に複雑な場合があるため、常に意図したとおりに機能するとは限りません。マウス メッセージの場合、これはキー メッセージよりも問題になる可能性が低くなります。

おそらく、自動化 API を使用する方が簡単でしょう。

于 2014-01-01T09:37:35.580 に答える
0

同じ問題かどうかはわかりませんが、やりたかったことと修正方法は次のとおりです。

コードからマウスイベントをシミュレートするにはどうすればよいですか?への回答から あなたのアプリケーションよりもSendInput少ないか同じであるプログラムでのみ動作することを見てきました。integrity level

ゲームに自動的にログインしたかったのです。そのゲームは、HackShield などの管理者として起動する必要があります。SendInput が Firefox で機能する (キーボード イベントをテストした) のに、そのゲームでは機能しないのはなぜだろうと思っていました。

アプリにフォーカスすると、画面の正しい領域が選択され、マウスがその場所に移動しましたが、ゲームにフォーカスが合いませんでした。手動でゲームに焦点を合わせた場合、アプリケーションはクリックする正しい領域を計算しましたが、マウスの移動もクリックも実行されませんでした。

私のアプリケーションも管理者として起動すると、問題が解決し、すべてが魅力的に機能しました =)

これが他の誰かにも役立つことを願っています!

于 2014-09-23T10:35:12.720 に答える