




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南通师范高等专科学校《运动按摩》2023-2024学年第一学期期末试卷
- 大连民族大学《食品安全卫生学》2023-2024学年第一学期期末试卷
- 内蒙古艺术学院《纪录片研究》2023-2024学年第一学期期末试卷
- 游乐场设备备件库存管理制度
- 住房公积金管理办法释义
- 合水县室内绿化管理办法
- 修旧利废管理办法化建议
- 天津大规模屯粮管理办法
- 保障房管理运营管理办法
- 天水市文明校园管理办法
- 手枪钻手传振动测试报告5
- 《音乐基础-乐理·视唱》
- YS/T 921-2013冰铜
- GB/T 5193-2007钛及钛合金加工产品超声波探伤方法
- GB/T 1041-2008塑料压缩性能的测定
- GA/T 1555-2019法庭科学人身损害受伤人员后续诊疗项目评定技术规程
- 酶学(高级生化课件)
- 新人教版七年级上册初中生物全册课时练(课后作业设计)
- 仿制药生物等效性试验指导原则(日本)
- 一诺LZYN质量流量计使用说明书-2009版
- 2022年部编版二年级语文下册期末试卷(及参考答案)
评论
0/150
提交评论