版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、今天在网上看到有人问C#如何实现鼠标左键自动点击并自己设定点击间隔,我也感到很好奇,查了一下发现很简单,只需利用WIN32 API的两个函数SetCursorPos和mouse_event操作鼠标:调用方法如下:DllImport("user32.dll") static extern bool SetCursorPos(int X, int Y); DllImport("user32.dll")
2、160; static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); Flags enum MouseEventFlag : uint
3、60; Move = 0x0001, LeftDown = 0x0002, &
4、#160; LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, Mi
5、ddleDown = 0x0020, MiddleUp = 0x0040, XDown = 0x0080, XUp = 0x0
6、100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000
7、60; 其中SetCursorPos使鼠标移动到指定位置;mouse_event使用MouseEventFlag枚举中的Move,也可以使鼠标移动。mouse_event中使用不同的枚举值可以模拟不同的鼠标事件。值得注意的是有几点:1. 我们不能用mouse_event(MouseEventFlag.LeftDown, 10, 10, 0, UIntPtr.Zero);去模拟在(10, 10)处的左键事件,我们需要把这步拆成两步:第一步:移动鼠标到(10,10)处,用SetCursor
8、Pos(10, 10);第二步:触发左键,用mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);本质上是两步的事件,不能把window API 想的太聪明,认为它会自动跑到(10,10)处,再左键2. MouseEventFlag的枚举值可以多个一起用,使用 | 操作符鼠标左键按下和松开两个事件的组合即一次单击: mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) 两次连续的鼠标左键单击事件 构成一次鼠标双击事件: mouse_event (
9、MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) 3. MouseEventFlag中有个Absolute枚举,如果没指定Absolute, 则mouse_event的操作是相对于上次鼠标所在的位置;如果指定了Absolute,则是相对于整个屏幕坐标的位置。这里要注意,指定Absolute,鼠标的坐标会被约束在0, 65535之间。0即对应屏幕左,65535即对应屏幕右下角。所以模拟在(1
10、0, 10)处的左键,代码应改为: 知道了这些之后,事情就变得相当简单了,可以建一个线程来控制鼠标的事件。完整代码如下:namespace ControlMouse public partial class Form1 : Form DllImport("User32") public extern static void m
11、ouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo); DllImport("User32") public extern static void SetCursorPos(int x, int y); DllImport("U
12、ser32") public extern static bool GetCursorPos(out POINT p); StructLayout(LayoutKind.Sequential) public struct POINT
13、0; public int X; public int Y; public enum MouseEven
14、tFlags Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004,
15、160; RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020,
16、60; MiddleUp = 0x0040, Wheel = 0x0800, Absolute = 0x8000 /在(x,y)处
17、单击 private void AutoClick(int x, int y) POINT p = new POINT(); GetCursorPos(out p);
18、 try SetCursorPos(x, y);
19、; mouse_event(int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero); mouse_event(int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), 0, 0, 0,
20、IntPtr.Zero); finally &
21、#160; SetCursorPos(p.X, p.Y); Point CursorPosition = new Point(0, 0);
22、 Thread controlThread; /控制鼠标的线程 private void ThreadRunMethod() while (true)
23、160; CursorPosition = Cursor.Position; Thread.Sleep(5000); /时间间隔 &
24、#160; AutoClick(CursorPosition.X, CursorPosition.Y); Thread.Sleep(5000);
25、; AutoClick(CursorPosition.X + 2, CursorPosition.Y - 15);
26、60; public Form1() InitializeComponent(); private void button1_Click(object sender, EventArgs e) try
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘肃省天水市清水县多校联考2025-2026学年高二上学期1月期末考试地理试卷(含答案)
- 安徽省芜湖市无为市部分学校2025-2026学年八年级上学期1月期末考试物理答案
- 物理初二下册期末试卷及答案
- 文物学基础题库及答案
- 新部编版一年级语文上册第一次月考练习卷及答案(八套)
- 道德与法治四年级上册期末练习测试题及参考答案(综合题)
- 脸部按摩培训课件
- 2022人教版四年级上册数学期末测试卷附参考答案【培优a卷】
- 现代科技导论 教案
- 电气验收标准
- “党的二十届四中全会精神”专题题库及答案
- 2026届福建省宁德市三校高三上学期1月月考历史试题(含答案)
- 2026年冀教版初一地理上册期末真题试卷+解析及答案
- 2025年文化产业版权保护与运营手册
- 四川省乐山市高中高三上学期第一次调查研究考试数学试题【含答案详解】
- 物流行业运输司机安全驾驶与效率绩效评定表
- 2026年及未来5年市场数据中国脱硫市场运行态势及行业发展前景预测报告
- 中国农业科学院2026年度第一批统一公开招聘笔试考试参考试题及答案解析
- 饲料运输合同范本
- 厦门灌口中学2026届化学高二第一学期期末质量检测试题含答案
- 室外看台座椅安装施工方案
评论
0/150
提交评论