小辉程序在讲解过程中以C为基础,某些地方会兼顾讲解Delphi的用法。但由于小辉用Delphi和VB搞开发是在98年以前的事,现在一些技术细节也疏忘了许多,因此,朋友们若问我关于Delphi/VB方面的技术问题,小辉可能无法给你满意的回答,建议你去相关的主页查询。对于涉及界面开发的一些简单问题,恕小辉不能一一回答
鼠标的自动移动/点击功能的作弊软件重要的一个功能。有很多种方法能够实现鼠标的移动和点击。这里讲述两个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接口。