TAG:
鼠标的自动移动/点击功能的作弊软件重要的一个功能。如果认真看过了第二章<自动启动/关闭广告条>的朋友,想必对此原理应该了解了。有很多种方法能够实现鼠标的移动和点击。这里讲述两个API函数: BOOL SetCursorPos( int X, // horizontal position int Y // vertical position ); 设置鼠标位置。鼠标指针在屏幕像素坐标系统中的X,Y位置 这个函数是用来设置Mouse位置的。可以用这个函数来移动mouse在屏幕上的移动。 另外一个函数功能比较强,即mouse_event() VOID mouse_event( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, DWORD dwExtraInfo ); 设置mouse状态。参数说明如下: dwFlags Long,下述标志的一个组合 : MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 MOUSEEVENTF_MOVE 移动鼠标 MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下 MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起 MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下 MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下 MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下 MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下 dx 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动 dy 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动 dwData amount of wheel movement dwExtraInfo,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序。 例如:将mouse移动到坐标(450,100) 可用函数: SetCursorPos(450,100) ; 或 mouse_event(MOUSEEVENTF_MOVE ,0,450,100,GetMessageExtraInfo()); 来实现 实现鼠标单击: mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,GetMessageExtraInfo()); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo ()); 那么,如何模拟mouse不断的移动和点击呢?这需要用定时器完成。 以C为例: 在初始化程序的时候,设置时钟: ... case WM_CREATE: ... SetTimer(1, 1000, NULL); break; 这样就设置了ID号为1 的时钟事件, 它每秒(1000毫秒)将产生一个 WM_TIMER事件。 然后我们在WM_TIMER事件中将入相关的处理: case WM_TIMER: { ... // mouse move code... // mouse click code... break; } 在Delphi中,时钟是通过一个Timer控件实现的。 关于时钟事件的运用在此软件中是很基本的一个概念。几乎所有的工作都是在时钟事件中完成的。如需进一步的了解时钟的用法,请查阅相关资料。 如何实现自动滚屏?我就不细说了,有这么几种方法,我都试过,保证没有问题: 1. 找到IE的当前窗口后,向其发送 Scrool消息。 2. 找到IE的Scrool消息,结合前面的mouse点击方式,自动点击scroll条 3. 可以调用IE的com接口。使用 IHTMLDocument接口,调用put_scrollTop即可完成。另外,其实这个作弊软件是可以全部调用IE的CM接口来完成的。主要文档可参阅 msdn. 那些以 IHTMLxxxxxx开头的都是IE的COM接口。 如果你有什么问题或建议,请到小辉的论坛提出。我会尽量在最快的时间里为你解答。 (小辉) |