2

当我玩帝国时代或其他策略游戏时,我经常需要将一些资源卖 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 等)甚至在帝国时代都可以很好地工作,但不幸的是,它在“要塞十字军”和其他一些我不记得他们的名字的游戏中不起作用。

我认为发生这种情况是因为点击模拟在高级别,如果模拟更接近驱动程序级别,它将起作用。

我有 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 回答