分类:
2010-10-02 00:30:59
鼠标的自动移动/点击功能的自动模拟测试程的一个重要功能。有很多种方法能够实现鼠标的移动和点击。这里讲述两个API函数:
SetCursorPos The SetCursorPos function moves the cursor to the specified screen coordinates. If the new coordinates are not within the screen rectangle set by the most recent ClipCursor function call, the system automatically adjusts the coordinates so that the cursor stays within the rectangle. BOOL SetCursorPos( int X, // horizontal position int Y // vertical position );SetCursorPos设置鼠标位置。参数表示鼠标指针在屏幕像素坐标系统中的X,Y位置
这个函数是用来设置Mouse位置的。可以用这个函数来移动mouse在屏幕上的移动。
另外一个函数功能比较强,即mouse_event(). 不过此程序在 windows 2000/NT/XP系统中, 应该用 SendInput 代替
mouse_event The mouse_event function synthesizes mouse motion and button clicks. Windows NT/2000/XP: This function has been superseded. Use SendInput instead. VOID mouse_event( DWORD dwFlags, // motion and click options DWORD dx, // horizontal position or change DWORD dy, // vertical position or change DWORD dwData, // wheel movement ULONG_PTR dwExtraInfo // application-defined information );
设置mouse状态。参数说明如下:
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不断的移动和点击呢?可以使用定时器完成。
以Windows 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控件实现的。
关于时钟事件的运用在此软件中是很基本的一个概念。几乎所有的工作都是在时钟事件中完成的。如需进一步的了解时钟的用法,请查阅相关资料。
如何实现程序自动滚屏?
有这么几种方法,我都试过:
如何自动输入文字?
测试程序时,需要输入测试用例(例如文本或数字), 则在找到要输入文字的控件句柄之后, 发送 WM_SETTEXT 消息即可.