自动点击器 C#
模拟鼠标和键盘的程序。

引言
这个程序模拟你的鼠标和键盘;用户逐步模拟鼠标或键盘操作;当用户按下“开始”按钮时,这些操作将自动运行。
背景
我构建这个代码的原因是为了节省大量时间。当我测试我的代码(通常是 Windows 应用程序)时,我需要运行应用程序并一遍又一遍地执行相同的步骤。所有这些步骤都是通过鼠标和键盘完成的;有些步骤需要几秒钟,有些步骤需要更长时间。所以我构建了一个模拟我的鼠标和键盘的程序。
如何使用
首先加载操作。
模拟鼠标
- 将鼠标移动到特定位置并
- 按下 ‘c’ 进行左键单击(鼠标)
- 按下 ‘d’ 进行双击(鼠标)
- 按下 ‘r’ 进行右键单击(鼠标)
模拟键盘
- 在文本框中填写 SendKeys 命令
- 模拟点击到特定位置
- 按下 ‘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
类。我不会在此文章中详细介绍这个问题,尽管它是一个解决跨线程问题的绝佳解决方案。