您的位置:首页 > 其它

模拟鼠标键盘

2012-10-28 16:19 225 查看

一、用处

模拟鼠标键盘这个功能的作用非常多,这里简单举几个例子:

1)简单的游戏外挂

2)工作中自动化实现等需要进行的鼠标点击等操作

3)简单的聊天机器人等

二、实现原理

在windows下模拟鼠标的话,咨询Win32各种库吧,这里python中对应的库就是pywin32库啦。

http://sourceforge.net/projects/pywin32/

下载安装后,在安装的python对应目录下的Lib\site-packages\win32\Demos中可以找打大部分例子。

1、对窗口的操作

 通过名字可以找到对话框的句柄:

dlg = win32gui.FindWindow(None,'Windowname')

获取对话框句柄后,可以掉用ShowWindow函数将对话框进行显示
win32gui.ShowWindow(dlg,win32con.SW_RESTORE)
# 这个函数可以进行移动对话框
win32gui.MoveWindow(dlg,0,0,0,0,1)
# 激活对话框,将对话框显示在最前面
win32gui.SetForegroundWindow(dlg)

2、对鼠标的操作函数

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表示,这函数认为是当前鼠标所在的点。

3、对键盘的操作

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

三、代码实例

模拟鼠标点击,这里找出来和萌萌聊天的QQ对话框,然后将其关闭
关于查找坐标可以事先模拟一下,然后通过上一篇鼠标键盘监控中的代码获取具体的坐标
#-*- 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))


模拟键盘点击,自动和萌萌聊扣扣的机器人,下面坐标是通过上篇文章中pyHook获取的坐标。

a键按下,a键抬起,可以输入一个a字,然后输入回车即可。

#-*- 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);


《完》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: