Python驱动级按键-pywin32的使用_雪落南城的博客-程序员ITS201_python驱动级模拟按键

技术标签: 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)
 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lbh199466/article/details/88817398

智能推荐

WPF数据绑定(3) 绑定到数据库_wuhongyao3的博客-程序员ITS201

根据MSDN示例修改.XMAL文件代码<Window x:Class="WpfApplication1.Window11" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

宽带服务器光信号亮红灯,宽带的光信号一直闪红灯是为什么_weixin_39998859的博客-程序员ITS201

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。宽带的光信号一直闪红灯的原因及解决方法有:1、光猫光接口有问题,需要更换光猫。2、室内尾纤连接光猫接头松脱,把接头插好即可恢复。3、室内部分宽带弯折过大,宽带弯折过度会影响光信号在宽带内光的全反射传输,只要把宽带顺直即可。4、室外部分宽带有折断,需要找运营商处理。5、运营商机房设备光端口故障,也需要运营商处理。宽带(英语:Broa...

为什么要上企业管理软件ERP_普通网友的博客-程序员ITS201

为什么要上企业管理软件ERP?随着信息化的发展,大多数企业家已经把ERP作为管理工作中不可缺少的一部分,原因很简单:ERP的价值效益是不可估量的。因为ERP系统并不是把企业现有的工作图纸化,而是对企业工作进行优化,为企业带来巨大的成果。ERP到底可以为企业带来什么?​1、ERP系统本身的优秀ERP系统发现到现在经历了五个阶段,从MIS系统到MRP,再到MRPII,到ERP阶段,...

选择题1--中国大学MOOC-陈越、何钦铭-数据结构-2020夏期末考试_Gusta_j的博客-程序员ITS201

2-1 要判断一个整数N(&gt;10)是否素数,我们需要检查3到√​N之间是否存在奇数可以整除N。则这个算法的时间复杂度是:(2分)2-2数据结构中Dijkstra算法用来解决哪个问题?(2分)2-3 将 {28, 15, 42, 18, 22, 5, 40} 逐个按顺序插入到初始为空的最小堆(小根堆)中。则该树的前序遍历结果为:2-4给定初始待排序列{ 15,9,7,8,20,-1,4 }。如果希尔排序第一趟结束后得到序列为{ 15,-1,4,8,20,9,7 },则该趟增量为:2-5下

appium相对位置定位元素---父节点、兄弟节点_n_laomomo的博客-程序员ITS201_appium parent

讲一下定位手机app上元素时定位父节点、兄弟节点的方法 这里就讲这两种了,也是比较常用的两种方法,其他的方法大家查看博客的其他章节 实例: 我们现在要定位到RelativeLayout[0,1285][1080,1465]下的LinearLayout下的第二个元素 一、通过兄弟节点来定位 使用方法:following-sibling:: 找到当前节点的后面一个节点,也就是弟弟节点preceding...

网络编程小案例_guohongyanghy的博客-程序员ITS201

C/S结构B/S结构网络通信协议:Ipv4是4个字节,就是4*8=32位,ipv6是16个字节,不是6,就有16*8=128位demo1代码:客户端import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;//TCP通信的客户端publ...

随便推点

html中jsonp错误,解决jquery中jsonp格式跨域请求报parsererror的错误_百分之二十六的博客-程序员ITS201

在vs中创建一个空的mvc项目,在Controllers文件夹中添加一个控制器CommonController,并在该控制器下添加一个action用于获取服务器时间,代码如下:publicActionResultgetServerTime(stringcallback){stringjsonp="'serverTime':'{0}'";DateTimecurTime=DateTi...

Win系统 - 关于GPU,你需要长的“姿势”_放羊的牧码的博客-程序员ITS201

图形处理单元(或简称GPU)会负责处理从PC内部传送到所连接显示器的所有内容,无论你在玩游戏、编辑视频或只是盯着桌面的壁纸,所有显示器中显示的图像都是由GPU进行渲染的。本文系统极客将向大家介绍什么是GPU、它是如何工作的,以及为什么要为游戏和图像密集型应用程序配置专用显卡。对普通用户来说,实际上不需要独立显卡就可以向显示器「提供」内容。像笔记本电脑或平板用户,通常CPU芯片都会集成G...

LPC17XX系统初始化文件_魅力狂人的博客-程序员ITS201

一直很不愿意写这种技术性的文章,部分原因是自己太菜了LPC17XX系统初始化文件,还够不上这个档次,但这对一些缺乏相关信息的人还是很有用的,或者说是为了自己的记忆更深些吧!   LPC17XX里还有一个系统初始化文件其中包括:3个头文件,2个C文件,1个.S文件。分别是:LPC17xx.h、core_cm3.h、system_LPC17xx.h;core_cm3.c、system_

hive 以beeline的模式启动_weixin_49719367的博客-程序员ITS201_hive启动beeline

hive 以beeline的模式启动beeline启动之前先确保 ,metastore 以及hiveserver2服务已经启动hive 启动元数据服务nohup hive --service metastore &amp;hive 启动 hiveserver2 服务nohup hive --service hiveserver2 &amp;hive 启动客户端连接beelinebeeline -u jdbc:hive2://localhost:10000启动中发生错误:Error:C

CMD下运行.java,打jar包_No_Game_No_Life_的博客-程序员ITS201

1:进入该文件所在的盘符,如这个文件在D盘d:2:在该盘符下进入该文件所在的文件夹(主要命令cd 文件夹; dir是查看该文件夹下面的东西)Cd 文件夹3:进入到该文件夹可以看到这个java文件以后 那么就用javac编译他Javac  helloword.java4:现在就生成了.class文件5:进入对应需要打jar的目录,输入命令: jar -cvf lkf.

C实现矩阵加减乘除运算_Einstein_liu的博客-程序员ITS201_c语言矩阵除法

1、矩阵的加减乘除求逆运算的概念:  (1)矩阵概念      有m n个数排列成一个m行n 列,并括以方括弧(或圆括弧)的数表称为m行n 列矩阵。  (2)矩阵加法:    (3)矩阵乘法:  (4)矩阵的求逆运算  (5)矩阵的除法:    分成两种(1)A\B=inverse(A)*B  (2)B/A=B*inverse(A),理解上可能有误,不过

推荐文章

热门文章

相关标签