python之模拟键盘

对于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的不是很方便,有点受限硬件。

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

本文分享自微信公众号 - 孤独的S(sjw_980305)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part17-mask-collide碰撞检测

如上图,左侧是默认的检测模式:基于矩形的检测(这也是性能最好的模式), 右侧是基于圆形的检测(性能略差于矩形检测)。

11270
来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part9-使用spritesheet

做过前端的兄弟应该都知道css sprite(也称css精灵),这是一种常用的减少http请求次数的优化手段。把很多小图拼成一张大图,只加载1次,然后用css定...

10650
来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part13-改进跳跃

这节研究下跳跃如何做得更自然,先看看之前的跳跃有什么问题,我们把settings.py里的初始化参数调整下:

11140
来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part12-platform图片

目前为止,Player的站立、行走、跳跃都是动画了,只有跳板(即:Platform类)还是难看的矩形,这节我们把Platform也换成图片:

9340
来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part18-背景滚动

2. 兔子向上跳时,(背景)白云也要相应的滚动,但是为了视觉效果,速度要低于档板的速度(比如:1/2 or 1/3)。

9740
来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part15-PowerUp加速器

这一节我们给游戏增加点额外的奖励,大多数游戏中都会有金币、装备啥的来激励玩家,在jumpy这个游戏中,我们也可以增加类似的道具:加速器。效果图如下:

10340
来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part16-enemy敌人

接上回继续,这次我们要给游戏加点难度,增加几个随机出现的敌人,玩家碰到敌人后Game Over。

6820
来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part8-记录历史最高分

通常在多玩家的游戏中,每个玩家都会有自己的得分,最高分数会成为该游戏的最佳记录。这一篇,学习下如何记录最高得分:(为了简化代码,本文采用文件方式,仅记录本机得分...

10710
来自专栏品茗IT

Python系列1-Anaconda 安装

8830
来自专栏菩提树下的杨过

pygame-KidsCanCode系列jumpy-part14-背景音乐及音效

没有音乐和音效的游戏是没有灵魂的,这回讲解如何处理背景音乐及跳跃音效。加载music及sound的方法,之前已经写过,见:pygame 笔记-8 背景音乐&子弹...

11740

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励