技术标签: Python
实践证明 pyinput会被游戏屏蔽
winio只适合PS/2 圆口键盘
下面使用
参考:https://mp.weixin.qq.com/s/WXf5JVyyFZqp-DYlGigL-g
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即可
最重要的一点,如果要在游戏中使用,一定要以管理员的权限运行脚本,这样才可以使用。
参考自:https://blog.csdn.net/qq_33371343/article/details/78916751
一、pywin32常用函数
(1)获取鼠标位置
win32api.GetCursorPos()
(2)鼠标左键按下
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
(3)鼠标左键放开
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
(4)鼠标右键按下
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
(5)鼠标右键放开
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
(6)设置鼠标位置
win32api.SetCursorPos((x, y))
(7)键盘输入事件
win32api.keybd_event(VK_CODE[word], 0, 0, 0)
win32api.keybd_event(VK_CODE[word], 0, win32con.KEYEVENTF_KEYUP, 0)
二、封装接口
(1)获取当前鼠标位置
def cursor_point(self):
"""
获取当前鼠标位置
"""
pos = win32api.GetCursorPos()
return int(pos[0]), int(pos[1])
(2)鼠标左击事件
def mouse_left_click(self, new_x=None, new_y=None, times=1):
"""
鼠标左击事件
:param new_x: 新移动的坐标x轴坐标
:param new_y: 新移动的坐标y轴坐标1506240215
:param times: 点击次数
"""
self.mouse_move(new_x, new_y)
time.sleep(0.05)
while times:
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
times -= 1
(3)鼠标右击事件
def mouse_right_click(self, new_x=None, new_y=None):
"""
鼠标右击事件
:param new_x: 新移动的坐标x轴坐标
:param new_y: 新移动的坐标y轴坐标
"""
self.mouse_move(new_x, new_y)
time.sleep(0.05)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
(4)移动鼠标位置
def mouse_move(self, new_x, new_y):
if new_y is not None and new_x is not None:
point = (new_x, new_y)
win32api.SetCursorPos(point)
self.x = new_x
self.y = new_y
(5)键盘输入文本
def key_input(self, input_words=''):
for word in input_words:
win32api.keybd_event(VK_CODE[word], 0, 0, 0)
win32api.keybd_event(VK_CODE[word], 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(0.1)
(6)键盘输入事件
def key_even(self, input_key):
win32api.keybd_event(VK_CODE[input_key], 0, 0, 0)
win32api.keybd_event(VK_CODE[input_key], 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
文章浏览阅读153次。首先先写一个类继承一个baseAdapte类这是一个抽象类 public abstract class MyBaseAdapter3<T> extends BaseAdapter { public List<T> list; //通过构造方法获取集合数..._adapter客户端定时抽取
文章浏览阅读4k次。SAP BW DSO与InfoCube比较:
文章浏览阅读76次。英语部分自我介绍为什么喜欢长跑,介绍一下长跑的经历介绍一下STITP项目实现的细节雅思考试各个模块得到的分数抽题部分不记得了,反正不会答,貌似是隐式模式什么的专业课部分快速傅立叶变换的原理,用算法实现它所需要的复杂度简诉实现快速傅立叶变换最小时间复杂度算法的原理利用深度学习对图片进行去雨,判断去雨效果所使用的指标自己在学习编程过程中遇到困难,如何去解决计算机网络的结构层次,传输层所使用的协议TCP协议可靠传输的原理,如何进行无差错传输UDP协议_计算机复试问项目细节
文章浏览阅读3.2k次,点赞3次,收藏6次。线性表是最基本、最常用的数据结构,大部分线性表中数据元素之间的关系是一对一的关系,除了首尾元素,其它元素都是首尾相连的其表示方法主要有顺序表示(顺序表)以及链式表示(链表),在本节介绍顺序表的一些操作实现顺序表至少包含一个用于存储数据的数组和一个表示数据个数的变量,因此顺序表可定义为:typedef struct { int aiArray[ARRAY_SIZE]; i..._判断顺序表是否为空
文章浏览阅读436次。1、下载Python并安装在环境变量path中加上:C:\Python27 和 C:\Python27\Scripts2、查看Python是否安装成功执行Python3、执行:pip install robotframework4、验证是否安装成功:pybot --version5、执行:pip install robotframework-sel...
文章浏览阅读1.8k次。转载于:https://www.jianshu.com/p/c9bc994933d5首先,看一下一个组件的构造import React,{ Component } from 'react';class Demo extends Component { constructor(props,context) { super(props,context) ...
文章浏览阅读1.9k次。自然语言处理技术(NLP)在推荐系统中的应用原2017.06.29人工智能头条作者: 张相於,58集团算法架构师,转转搜索推荐部负责人,负责搜索、推荐以及算法相关工作。多年来主要从事推荐系统以及机器学习,也做过计算广告、反作弊等相关工作,并热衷于探索大数据和机器学习技术在其他领域的应用实践。 责编:何永灿([email protected]) 本文为《程序员》原创文_58nlp
文章浏览阅读1.3k次。所有语言都有字符串处理的包,今天整理下golang的strings包 完整的介绍doc上有golang strings docContains, ContainsAny, ContainsRune ContainsRune(s,p)用于查找unicode编码为p的unicode是否在s里面 ContainsAny(s,p)只要满足p中的1个unicode字符在s中即可,Contains需...
文章浏览阅读2.9k次。使用Jumpserver源码部署堡垒机,前后端分离,文章中的nginx配置文件是针对的构建方式,所以在编译时lina和luna使用构建方式,不用运行前端服务。_jumpserver 源码
文章浏览阅读1.2k次。Oracle自8i起就全面支持java,但各个版本的oracle中默认jdk版本均不相同,oracle8i中为jdk1.2,oracle9i中为jdk1.3,oracle10g中为jdk1.4~~至笔者行为之际,当前的最新版本为jdk1.5 update 11.因笔者java开发出身,在做oracle开发中经常会用java来扩展oracle功能,但是由于oracle自带jdk版本过低,可能会造成一..._oracle安装好后可以重新安装jdk吗
文章浏览阅读3.6w次,点赞19次,收藏41次。winform客户端设计_winform界面设计
文章浏览阅读914次。第一种:public class TimeBook { private Logger logger = Logger.getLogger(this.getClass().getName()); //审核数据的相关程序 public void doAuditing(String name){ logger.log(Level.INFO, name + "开始审核数据..."_不用aop做日志