鼠标模拟

设鼠标位置

Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

产生鼠标动作

Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
参数 意义
dwFlags 鼠标动作标记
dx 表示 x 方向坐标或偏移
dy 表示 y 方向坐标或偏移
cButtons 滚轮滚动值,正值向上,负值向下
120 表示滚轮按下
dwExtraInfo 附加值,GetMessgeExtrainfo 函数

dwFlags 可用值

这些消息中,鼠标位置为屏幕位置。

参数 意义
Public Const MOUSEEVENTF_ABSOLUTE = &H8000 表明 dx,dy 为鼠标绝对坐标,否则为相对移动位置(点数)

注:绝对坐标时,屏幕右下角坐标是 (65535,65535)

Public Const MOUSEEVENTF_MOVE = &H1 发生移动
Public Const MOUSEEVENTF_LEFTDOWN = &H2 按下鼠标左键
Public Const MOUSEEVENTF_LEFTUP = &H4 松开鼠标左键
Public Const MOUSEEVENTF_RIGHTDOWN = &H8 按下鼠标右键
Public Const MOUSEEVENTF_RIGHTUP = &H10 松开鼠标右键
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 按下鼠标中键
Public Const MOUSEEVENTF_MIDDLEUP = &H40 松开鼠标中键
MOOSEEVENTF_WHEEL 鼠标滚轮滚动。移动的数量由 cButtons 给出

鼠标消息(窗口范围)

参数 意义
hwnd 接收消息的窗口句柄
msg msg 鼠标消息
wParam Hittest 光标所在元素
lParam 指向 Point 结构的指针

msg 消息

这些消息中,鼠标位置为屏幕位置。

常量 意义
WM_NCLBUTTONDBLCLK 左键双击
WM_NCLBUTTONDOWN 左键按下
WM_NCLBUTTONUP 左键放开
WM_NCRBUTTONDBLCLK 右键双击
WM_NCRBUTTONDOWN 右键按下
WM_NCRBUTTONUP 右键放开
WM_NCMBUTTONDBLCLK 中键双击
WM_NCMBUTTONDOWN 中键按下
WM_NCMBUTTONUP 中键放开

Hittest 标记

代表光标位于窗口的位置,由系统发送 WM_NCHITTEST 消息及鼠标位置到窗口返回的值,同 DefWindowProc 函数。

截获此消息可修改实际的位置。

Hittest DefWindowProc(hwnd, WM_NCHITTEST, 0, makelparam(x,y))
常量 意义
HTBORDER 不可调窗口的边框
HTBOTTOM 底部边框
HTBOTTOMLEFT 左下角边框
HTBOTTOMRIGHT 右下角边框
HTCAPTION 标题栏
HTCLIENT 客户区
HTCLOSE 关闭按钮
HTERROR On the screen background or on a dividing line between windows (same as HTNOWHERE, except that the DefWindowProc function produces a system beep to indicate an error)
HTGROWBOX In a size box (same as HTSIZE)
HTHELP 帮助按钮
HTHSCROLL 水平滚动条
HTLEFT 左边框
HTMENU 菜单栏
HTMAXBUTTON 最大化按
HTMINBUTTON 最小化按钮
HTNOWHERE On the screen background or on a dividing line between windows
HTREDUCE 最小化按钮
HTRIGHT 右边框
HTSIZE In a size box (same as HTGROWBOX)
HTSYSMENU 系统菜单或子菜单的关闭按钮
HTTOP 顶部边框
HTTOPLEFT 左上角边框
HTTOPRIGHT 右上角边框
HTTRANSPARENT In a window currently covered by another window in the same thread (the message will be sent to underlying windows in the same thread until one of them returns a code that is not HTTRANSPARENT)
HTVSCROLL 垂直滚动条
HTZOOM 最大化按钮

鼠标消息(客户区范围)

参数 意义
hwnd 接收消息的窗口句柄
msg msg 鼠标消息
lParam 鼠标屏幕位置,低位 X,高位 Y

msg 消息

常量 意义
WM_MOUSEMOVE = 0x0200 鼠标移动
WM_LBUTTONDOWN = 0x0201 左键按下
WM_LBUTTONUP = 0x0202 左键放开
WM_LBUTTONDBLCLK = 0x0203 左键双击
WM_RBUTTONDOWN = 0x0204 右键按下
WM_RBUTTONUP = 0x0205 右键放开
WM_RBUTTONDBLCLK = 0x0206 右键双击
WM_MBUTTONDOWN = 0x0207 中键按下
WM_MBUTTONUP = 0x0208 中键放开
WM_MBUTTONDBLCLK = 0x0209 中键双击
WM_MOUSEWHEEL = 0x020A 滚动

示例1 : 移动到某点,点击鼠标左键。

SetCursorPos(1279,0);

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);

mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);