老土但有效的刷百度空间人气不被封的方法(C实现操纵鼠标事件,单击移动滚轮)_第1页
老土但有效的刷百度空间人气不被封的方法(C实现操纵鼠标事件,单击移动滚轮)_第2页
老土但有效的刷百度空间人气不被封的方法(C实现操纵鼠标事件,单击移动滚轮)_第3页
老土但有效的刷百度空间人气不被封的方法(C实现操纵鼠标事件,单击移动滚轮)_第4页
老土但有效的刷百度空间人气不被封的方法(C实现操纵鼠标事件,单击移动滚轮)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论