模拟鼠标键盘这个功能的作用非常多,这里简单举几个例子:
1)简单的游戏外挂
2)工作中自动化实现等需要进行的鼠标点击等操作
3)简单的聊天机器人等
在windows下模拟鼠标的话,咨询Win32各种库吧,这里python中对应的库就是pywin32库啦。
http://sourceforge.net/projects/pywin32/
下载安装后,在安装的python对应目录下的Lib\site-packages\win32\Demos中可以找打大部分例子。
通过名字可以找到对话框的句柄:
dlg = win32gui.FindWindow(None,'Windowname')
获取对话框句柄后,可以掉用ShowWindow函数将对话框进行显示 win32gui.ShowWindow(dlg,win32con.SW_RESTORE) # 这个函数可以进行移动对话框 win32gui.MoveWindow(dlg,0,0,0,0,1) # 激活对话框,将对话框显示在最前面 win32gui.SetForegroundWindow(dlg)
int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
参数 意义
dwFlags Long,下面标志之一或它们的组合
dx,dy Long,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置
cButtons Long,没有使用
dwExtraInfo Long,没有使用
dwFlags常数 意义
const int MOUSEEVENTF_MOVE = 0x0001; 移动鼠标
const int MOUSEEVENTF_LEFTDOWN = 0x0002; 模拟鼠标左键按下
const int MOUSEEVENTF_LEFTUP = 0x0004; 模拟鼠标左键抬起
const int MOUSEEVENTF_RIGHTDOWN = 0x0008; 模拟鼠标右键按下
const int MOUSEEVENTF_RIGHTUP = 0x0010; 模拟鼠标右键抬起
const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 模拟鼠标中键按下
const int MOUSEEVENTF_MIDDLEUP = 0x0040; 模拟鼠标中键抬起
const int MOUSEEVENTF_ABSOLUTE = 0x8000; 标示是否采用绝对坐标
如果模拟鼠标一次点击可以用如下代码:
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
模拟鼠标右键单击事件:
mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )
两次连续的鼠标左键单击事件 构成一次鼠标双击事件:
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
另外,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,
如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点。
VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
参数:
bVk:定义一个虚拟键码。键码值必须在1~254之间。
bScan:定义该键的硬件扫描码。
dwFlags:定义函数操作的各个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。
KEYEVENTF_EXTENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。
KEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键将被按下。
dwExtralnfo:定义与击键相关的附加的32位值。
返回值:该函数无返回值。
键位码表:
字母和数字键 数字小键盘的键 功能键 其它键
键 键码 键 键码 键 键码 键 键码
A 65 0 96 F1 112 Backspace 8
B 66 1 97 F2 113 Tab 9
C 67 2 98 F3 114 Clear 12
D 68 3 99 F4 115 Enter 13
E 69 4 100 F5 116 Shift 16
F 70 5 101 F6 117 Control 17
G 71 6 102 F7 118 Alt 18
H 72 7 103 F8 119 Caps Lock 20
I 73 8 104 F9 120 Esc 27
J 74 9 105 F10 121 Spacebar 32
K 75 * 106 F11 122 Page Up 33
L 76 + 107 F12 123 Page Down 34
M 77 Enter 108 -- -- End 35
N 78 - 109 -- -- Home 36
O 79 . 110 -- -- Left Arrow 37
P 80 / 111 -- -- Up Arrow 38
Q 81 -- -- -- -- Right Arrow 39
R 82 -- -- -- -- Down Arrow 40
S 83 -- -- -- -- Insert 45
T 84 -- -- -- -- Delete 46
U 85 -- -- -- -- Help 47
V 86 -- -- -- -- Num Lock 144
W 87
X 88
Y 89
Z 90
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
#-*- coding:gb2312-*- import win32con,win32gui,win32api #pos=(x,y) x,y is cursor's coordinate def mouse_click(pos): win32api.SetCursorPos(pos) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP,0,0,0,0) if __name__ == "__main__": dlg = win32gui.FindWindow(None, '天然萌') win32gui.ShowWindow(dlg, win32con.SW_RESTORE) mouse_click((865,158))
#-*- coding:gb2312-*- import win32con,win32gui,win32api if __name__ == "__main__": dlg = win32gui.FindWindow(None, '天然萌') win32gui.ShowWindow(dlg, win32con.SW_RESTORE) win32gui.SetForegroundWindow(dlg) win32api.SetCursorPos((397,580)) win32api.keybd_event(65,0,0,0); win32api.keybd_event(65,0,win32con.KEYEVENTF_KEYUP,0); win32api.keybd_event(13,0,0,0); win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0);
《完》