前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python之模拟键盘

python之模拟键盘

作者头像
sjw1998
发布2019-09-28 13:12:49
5.4K0
发布2019-09-28 13:12:49
举报
文章被收录于专栏:孤独的S

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

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

Pyuserinput

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
left_arrow = 0x61
up_arrow = 0x65
right_arrow = 0x63
down_arrow = 0x62
a = 0x41
d = 0x44
x = 0x58

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

代码语言:javascript
复制
MapVirtualKey = ctypes.windll.user32.MapVirtualKeyA

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

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

第四个参数直接为0即可

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

winio:

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

---------------人生苦短,我用python

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孤独的S 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档