关于游戏脚本中按键“失灵”的问题

问题描述

在上一篇文章中我写到了要挂机刷级的操作,但是同时留下了一个问题,就是说数字键盘始终不能被造梦西游捕捉到,键盘上按键可以操作人物,但是用过代码把虚拟按键信息传递给游戏的时候就会失败,游戏没有任何反应,本来想着可能是pyautogui的虚拟按键信息有点问题(但是在其他软件中都是可以成功捕捉的),所以我又使用了pywin32这个库进行尝试,但是传输进去虚拟按键的信息还是失败。

import time
import win32api
import win32gui
import win32con

titlename = "FCBrowser"
hwnd = win32gui.FindWindow(None, titlename)
win32gui.ShowWindow(hwnd,win32con.SW_SHOWMAXIMIZED)
win32gui.SetForegroundWindow(hwnd)
while 1:
    time.sleep(1)
    win32api.keybd_event(51,0,0,0);
    time.sleep(0.1)
    win32api.keybd_event(51,0,win32con.KEYEVENTF_KEYUP,0);  # 键盘的码位,表示数字键3

问题解决

本来我是打算开始新的整活(试试用python进行机器学习帮我完成游戏辅助的工作),但是一想到这里有个问题,就忍不住想解决,在经过一番查找资料之后,我成功找到了原因,应该是虚拟按键没有被游戏承认。

就是说虚拟按键只是传输进去了一个信息,但是硬件并没有相应的动作,可能游戏的操作是需要检测到数字键盘在硬件上的信息才行。我不知道是否是制作者故意设置了这样一个检测来防止脚本辅助,但我觉得大概率不是,因为只有数字键盘失灵,由于对这方面知识的欠缺,我无法深入探究它的原因,但是有办法解决,只要在传输信息的时候动点手脚,让它认为我们也有硬件上对应的动作就好啦,也就是跟硬件相关的扫描码。

所以只需要把第二个参数改成键盘对应的扫描码就可以成功实现。

import time
import win32api
import win32gui
import win32con
titlename = "FCBrowser"
hwnd = win32gui.FindWindow(None, titlename)
win32gui.ShowWindow(hwnd,win32con.SW_SHOWMAXIMIZED)
win32gui.SetForegroundWindow(hwnd)
while 1:
    time.sleep(1)
    win32api.keybd_event(51,81,0,0);
    time.sleep(0.1)
    win32api.keybd_event(51,81,win32con.KEYEVENTF_KEYUP,0);  

这时候就可以对玩家二进行操控啦!

不同按键对应的扫描码先放一个网址在这里。

键盘码表:单键扫描码,ascii,组合键码 - 百度文库 (baidu.com)

键盘按键的各种编码对照表_键盘编码_liuyukuan的博客-CSDN博客

效果

插入视频太麻烦,先不放了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值