对于python来说,模拟键盘的方式据我了解有三种方式,其中有pyuserinput,win32api,以及winio。

其中第一种可以应用普通的程序或者桌面的键盘输入,第二和第三则是比较接近底层的模拟键盘,如果想做游戏的脚本便可以用第二和第三种,顺便一提第三种只使用圆孔的ps/2的键盘,第二种win32api亲测可以用于制作模拟dnf键盘移动的脚本。

 

Pyuserinput

     要使用Pysuerinput之前需要一些准备,安装好相关的库,先安装pywin32,以及pyHook,然后再安装pyuserinput

import pymouse,pykeyboard,os,sys from pymouse import * from pykeyboard import PyKeyboard m = PyMouse() k = PyKeyboard() #鼠标操作: m.click(x,y,button,n) #鼠标点击 #x,y –是坐标位置 #buttong –  1表示左键,2表示点击右键 #n –  点击次数,默认是1次,2表示双击 m.move(x,y) #–鼠标移动到坐标(x,y) x_dim, y_dim = m.screen_size() #–获得屏幕尺寸 #键盘操作: k.type_string(‘Hello, Python!’)# –模拟键盘输入字符串 k.press_key(‘A’) #–模拟键盘按A键 k.release_key(‘A’)# –模拟键盘松开A键 k.tap_key(“B”) #–模拟点击B键 k.tap_key(‘H’,n=2,interval=5)#–模拟点击H键,2次,每次间隔5秒 k.tap_key(k.function_keys[5]) #–点击功能键F5 k.tap_key(k.numpad_keys[5],3) #–点击小键盘5,3次 #联合按键模拟 #例如同时按alt+tab键盘 k.press_key(k.alt_key)# –按住alt键 k.tap_key(k.tab_key) #–点击tab键 k.release_key(k.alt_key)# –松开alt键

 

以上便是有关Pysuerinput的相关操作,并不是很难理解,一些方法也相当方便我们使用。

 

win32api:

准备:安装好pywin32,pip insatall pywin32

然后使用时

import win32api

import win32con   #导入这两个模块

import time  #导入时间模块要有中断时间

import ctypes

以下是我自己的模拟按键按下抬起的方法:

def keydownup(num): MapVirtualKey = ctypes.windll.user32.MapVirtualKeyA time.sleep(0.4) win32api.keybd_event(num, MapVirtualKey(num, 0), 0, 0) time.sleep(0.2) win32api.keybd_event(num, MapVirtualKey(num, 0), win32con.KEYEVENTF_KEYUP, 0)


其中MapVirtualkey是扫描码,一般不使用这个,如果要制作控制游戏人物的脚本时一定要填入扫描码才能在游戏中实现硬件级键盘模拟。

方法很简单

win32api.keybd_event(虚拟码,扫描码,0,0)

第一个参数是虚拟码有一些是不太一样的,需要自己根据自己的电脑测出相关的虚拟码,其中一些虚拟码,

left_arrow = 0x61 up_arrow = 0x65 right_arrow = 0x63 down_arrow = 0x62 a = 0x41 d = 0x44 x = 0x58

 

第二个参数是扫描码,如果一个一个去寻找扫描码会很麻烦,可以像我那样,在方法开始处或者程序起始处添加这么一句

MapVirtualKey = ctypes.windll.user32.MapVirtualKeyA

然后就可以传入虚拟码来寻找相应的扫描码

 

第三个是参数是作为判断按下与抬起的标识,按下时为0即可,因为键盘的全过程是按下与抬起,所有两个keybd_event才是一个完整的过程,其中一定要给其中添加一个时间暂停的,不然还是无法使用,即使在操作台或者pycharm上可以输入,在游戏中便没有效果了,时间自己可以传参数进去,也可以规定一个固定的值,这个时间便是你按住的时间

 

第四个参数直接为0即可

 

最重要的一点,如果要在游戏中使用,一定要以管理员的权限运行脚本,这样才可以使用。

 

winio:

这是一个调用第三方的库来模拟硬件级模拟键盘,由于我使用win32api已经做到了相关的要求,所有没有详细去了解。由于现在的键盘都是usb口,所有winio的不是很方便,有点受限硬件。