65.9K
CodeProject 正在变化。 阅读更多。
Home

自动点击器 C#

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (32投票s)

2009年1月15日

CPOL

2分钟阅读

viewsIcon

310779

downloadIcon

39916

模拟鼠标和键盘的程序。

ClickerEXE

引言

这个程序模拟你的鼠标和键盘;用户逐步模拟鼠标或键盘操作;当用户按下“开始”按钮时,这些操作将自动运行。

背景

我构建这个代码的原因是为了节省大量时间。当我测试我的代码(通常是 Windows 应用程序)时,我需要运行应用程序并一遍又一遍地执行相同的步骤。所有这些步骤都是通过鼠标和键盘完成的;有些步骤需要几秒钟,有些步骤需要更长时间。所以我构建了一个模拟我的鼠标和键盘的程序。

如何使用

首先加载操作。

模拟鼠标

  1. 将鼠标移动到特定位置并
  2. 按下 ‘c’ 进行左键单击(鼠标)
  3. 按下 ‘d’ 进行双击(鼠标)
  4. 按下 ‘r’ 进行右键单击(鼠标)

模拟键盘

  1. 在文本框中填写 SendKeys 命令
  2. 模拟点击到特定位置
  3. 按下 ‘t’(键盘)

要删除或编辑操作,请使用上下文菜单。你可以将鼠标移出主窗口并模拟操作。最大的问题是在不移动鼠标的情况下保持对主窗口的焦点 -> 解决方案非常简单 ‘Alt + Tab’(直到你重新聚焦主窗口)。加载操作后,按下“开始”按钮并等待(在循环完成之前不要移动鼠标。你可以保存或加载(打开)配置)。

Using the Code

我尽量使代码尽可能简单。

下一个 API 将鼠标移动到相关位置

[DllImport("user32")]
public static extern int SetCursorPos(int x, int y);

下一个 API 模拟鼠标事件(左/右键按下/释放,滚轮 EXE)

private const int MOUSEEVENTF_MOVE = 0x0001; /* mouse move */
private const int MOUSEEVENTF_LEFTDOWN = 0x0002; /* left button down */
private const int MOUSEEVENTF_LEFTUP = 0x0004; /* left button up */
private const int MOUSEEVENTF_RIGHTDOWN = 0x0008; /* right button down */

DllImport("user32.dll",
    CharSet = CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons,
    int dwExtraInfo);

要模拟一次点击,你需要使用这种方法两次:第一次用于按下点击,第二次用于释放点击。在安全方面,在移动到新位置和点击之间等待 100 毫秒,如下面的代码所示

SetCursorPos(action.X, action.Y)
Thread.Sleep(100);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

关注点

我在线程中运行操作循环。因为从另一个线程转到主线程是不正确的,所以我使用了 SynchronizationContext 类。我不会在此文章中详细介绍这个问题,尽管它是一个解决跨线程问题的绝佳解决方案。

© . All rights reserved.