2

Age of empires やその他の戦略ゲームをプレイするとき、リソースを 100 回販売してから別のリソースを販売する必要があることがよくあります。気に障る :(

以下を使用してマウスをクリックすることで役立つプログラムを作成しました。

//This is the decleration
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);

private void ClickTheMouse()
{
      int X = Cursor.Position.X;
      int Y = Cursor.Position.Y;
      mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}

次に、タイマーと上記のコードを使用して、30回クリックできます。

Windows (word、Firefox など) や Age of empires でさえ、すべてうまく機能しますが、残念ながら、「Stronghold crusader」や名前を覚えていない他のゲームでは機能しません。

これは、クリックが高レベルでシミュレートされたために発生すると考えられます。ドライバー レベルに近いレベルでシミュレートされれば、機能します。

2 つの質問があります。

  1. 私の仮定は正しいですか?
  2. このゲームで動作する下位レベルでマウス クリックをシミュレートするにはどうすればよいですか?

私は c# を使用していますが、C++ コードも役立ちます (PInvoke を使用します)。

ありがとう、

4

2 に答える 2

1

ある時点で同じ問題に直面しました。VS2010 でリリース/デバッグ コンパイラを介してアプリケーションを使用しようとしていますか? その場合は、個々のコンパイル済みファイルを単独で実行してみてください。必要に応じて、忘れずに管理者として実行してください。

何らかの理由で VSHost によってホストされている場合、特定のゲームでボットが正しく動作しませんでした。

于 2012-10-04T21:10:41.670 に答える
0

SendInput 関数 n User32.dll の使用を試みることができます。

http://alala666888.wordpress.com/2010/09/17/simulate-mouse-event-using-sendinput-and-setcursorpos/

ただし、より高い整合性レベルを持つアプリケーション内に入力イベントを挿入することはできません。これはあなたに起こっていると思います。

于 2012-10-04T20:52:42.840 に答える