一个人点鼠标总是很麻烦,尤其是这个时间很长的时候。所有就考虑要做一个模拟鼠标点击的工具。

1.准备

打开vs,新建一个窗口程序。

上面依次选择,
1.程序的类型:窗口程序
2.新程序的名字和命名空间
3.项目的位置。

然后就自动生成了一个窗体应用。

2.界面设计


类似上面的这个样子。一个输入框用来控制频率,一个按钮用来确认频率(ps:可以在输入框的离开事件中直接确认)
然后再从控件库加入一个小小的定时器。定时器的名字是Timer。

3.热键注册

首先全局注册一个热键来控制自动点击的开始与结束。

引用系统dll的方法

[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(IntPtr hWnd,                //要定义热键的窗口的句柄int id,                     //定义热键ID(不能与其它ID重复)           KeyModifiers fsModifiers,   //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效Keys vk                     //定义热键的内容);[DllImport("user32.dll", SetLastError = true)]public static extern bool UnregisterHotKey(IntPtr hWnd,                //要取消热键的窗口的句柄int id                      //要取消热键的ID);//定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)[Flags()]public enum KeyModifiers{None = 0,Alt = 1,Ctrl = 2,Shift = 4,WindowsKey = 8} 

心急小伙伴直接复制即可。
两个方法,第一个是注册热键,第二个是注销热键。一定要注销,不然热键会一直存在的。

在窗体中注册和注销

private void Form1_Load(object sender, EventArgs e)
{MouseDLL.RegisterHotKey(Handle, 100, MouseDLL.KeyModifiers.None, Keys.F1);}private void Form1_FormClosing(object sender, FormClosingEventArgs e){MouseDLL.UnregisterHotKey(Handle, 100);}protected override void WndProc(ref Message m){const int WM_HOTKEY = 0x0312;if (m.Msg == WM_HOTKEY && m.WParam.ToInt32() == 100){timer1.Enabled = !timer1.Enabled;}base.WndProc(ref m);}

方法一,窗体的进入事件,此时注册热键。热键id是随便选的。
方法二,窗体的结束事件,此时注销热键。
方法三,重载窗体的消息通知,判断是否有按键按下。如果按下就打开定时器的开关。
提示,多线程不支持鼠标模拟。

4.模拟鼠标

最后就是重点了。模拟鼠标的按下效果。
这里有一个重点,鼠标的位置默认是从当前鼠标位置开始计算的,如果要自定义位置,最好是使用绝对坐标。

引用系统dll

const int MOUSEEVENTF_MOVE = 0x0001; //移动鼠标
const int MOUSEEVENTF_LEFTDOWN = 0x0002; //模拟鼠标左键按下
const int MOUSEEVENTF_LEFTUP = 0x0004; //模拟鼠标左键抬起
const int MOUSEEVENTF_RIGHTDOWN = 0x0008; //模拟鼠标右键按下
const int MOUSEEVENTF_RIGHTUP = 0x0010; //模拟鼠标右键抬起
const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; //模拟鼠标中键按下
const int MOUSEEVENTF_MIDDLEUP = 0x0040; //模拟鼠标中键抬起
const int MOUSEEVENTF_ABSOLUTE = 0x8000; //标示是否采用绝对坐标
/// <summary>
/// 鼠标事件
/// </summary>
/// <param name="dwFlags"></param>
/// <param name="dx"></param>
/// <param name="dy"></param>
/// <param name="cButtons"></param>
/// <param name="dwExtraInfo"></param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

下面写一个鼠标左键的例子。

/// <summary>
/// 左键单击
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
public static void mouse_click(int x = 0, int y = 0)
{mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}

提示:里面的参数是可以合并的。比如

mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP, x, y, 0, 0);

最后的最后,把模拟左键的方法写在定时器里。同时设置定时器的频率。

private void timer1_Tick(object sender, EventArgs e)
{MouseDLL.mouse_click();}private void button1_Click(object sender, EventArgs e){var tt = textBox1.Text;int timer = timer1.Interval;if (int.TryParse(tt, out timer)){timer1.Interval = timer;}}

好了,现在只要运行这个程序就能够监听F1键,在按下F1键之后疯狂的点击鼠标左键。如果再次按下F1键,模拟点击就会停止了。

开发一个自动点击工具相关推荐

  1. Unity编辑器开发(五):实战、开发一个AB包编辑器工具

    前言 在我们上一篇(Unity编辑器开发(四):实战.开发一个AB包编辑器工具)的结尾,我们拥有了如下图中那样的一个编辑器窗口: 接下来我们来完成最后部分,也就是包括创建AB包,清理AB包,删除AB包 ...

  2. Android 自动点击工具,自动点击器app下载-自动点击工具 安卓版v1.0.2-PC6安卓网

    自动点击工具app是一款非常不错的系统工具类手机软件,有了自动点击工具app,你将从此释放双手进行抢购,还在等什么?下载自动点击工具app试试吧! 软件介绍 自动点击工具是一款记录手势和点击操作轨迹的 ...

  3. docwizard c++程序文档自动生成工具_如何开发一个基于 TypeScript 的工具库并自动生成文档

    为什么用 TypeScript? TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any ...

  4. Unity编辑器开发(三):实战、开发一个AB包编辑器工具

    前言 本系列将会从零开始开发一个轻量级的AB包编辑器工具(也就是打包或者管理AssetBundle的工具),完成以后,他的最终应用界面可能是如下这样的: 界面详解: 1.Create:创建一个新的空的 ...

  5. 在IDEA开发一个自动输入法切换插件

    1.背景与痛点 一张图说明.. 上面的问题不知道友友们遇到过没,反正我是经常遇到,f... 写代码免不了要写注释,但是注释的时候我们经常要在代码区和注释区进行切换,这个过程虽然看似简单但是偶尔也会出些 ...

  6. 13.1-自己开发一个“单片机烧写工具”!不是开玩笑吧?原来如此^~^(OTA升级)

    听到这个"需求"的第一反应"这是开玩笑吧".我是是一个普通的码农,怎么可能开发出了那么复杂的东西. 带着一头冷汗,开始查资料中- 原来如此,有一种下载程序的方式 ...

  7. 从零开发一个命令行脚手架工具 等

    大家好,我是若川.今天周末,话不多说,这一次花了几小时精心为大家挑选了20余篇好文,供大家阅读学习.本文阅读技巧,先粗看标题,感兴趣可以都关注一波,绝对不亏. 前端宇宙 小编就职于某大厂,是个爱前端爱 ...

  8. 从零开始开发一个自动抓取教务系统课表等信息并动态显示的安卓课程表APP,原理分析及功能实现完美教程

    前言 之前写过一篇JAVA使用HttpClient模拟登录正方教务系统,爬取学籍信息和课程表成绩等,超详细登录分析和代码注解的教程,在移植到移动平台时候,发现了如下问题: 抓取课表偶尔会不完全,出现全 ...

  9. webpack原理篇(六十二):实战开发一个自动合成雪碧图的loader

    说明 玩转 webpack 学习笔记 支持的语法 对样式里面图片引用后面加 __sprite 进行图片合并 如何将两张图片合成一张图片? 使用 spritesmith https://github.c ...

最新文章

  1. ITK:双边过滤图像
  2. Qt 多重继承时 moc 编译出错
  3. Smarty目录结构和子目录路径问题
  4. 教学交流研讨会总结(一)
  5. leetcode 107 --- 二叉树程序遍历 ii
  6. openwrt首次登录密码_什么是路由器登录密码 路由器登录密码介绍【详解】
  7. Django中@login_required用法简介
  8. 英伟达发布迁移学习工具包,现在可以申请早期试用
  9. Struts2 文件上传 文件类型 大小过滤
  10. Java事务之八——分布式事务(Spring+JTA+Atomikos+Hibernate+JMS)
  11. BZOJ2754 [SCOI2012]喵星球上的点名
  12. kido机器人用流量吗_拉在手心的爱-----乐视 KIDO有问必答的4G智能儿童手表评测...
  13. echar图表titile,x轴,y轴样式
  14. 各大PT网站信息记录(不断更新中)
  15. 2017腾讯实习生招聘笔试编程题
  16. 恭喜马斯克、纳德拉当选美国工程院院士,张宏江、方岱宁入选外籍院士
  17. word 文本框插入图片
  18. Python 英文文本字母跳转概率统计
  19. android 中止应用程序,如何终止Xamarin应用程序?
  20. 判断字符串是否为回文的三种常用编程语言实现

热门文章

  1. 多操作系统切换终结者
  2. 不可用来编辑html的文件,上网浏览器主页无法修改的解决办法
  3. 天润云上市在即:VC大佬田溯宁大幅减持,预计将套现2.6亿港元
  4. 非常全的javascript控制MediaPlayer的属性集合与realplayer对象使用
  5. 后台添加导航菜单(可显示或隐藏)
  6. Python向文本中添加内容却被覆盖
  7. java防止闪屏代码_防止屏幕闪烁
  8. android11以上 uri转file uri转真实路径
  9. 第一章 DirectX 计算机图形学(下)
  10. Java中字符串对象String、StringBuffer、StringBuilder的比较