PyAutoGUI无法识别小键盘按键输入问题求助
Minecraft自动化:PyAutoGUI无法模拟小键盘按键的解决办法
问题背景
我在Windows系统上用Python和PyAutoGUI做Minecraft自动化项目,已经实现切换到MC窗口、点击「Back to Game」按钮、按住W键控制角色前进这些功能。用第三方工具NeatMouse把小键盘8映射成鼠标上移,手动按num8能正常让MC角色抬头,但用PyAutoGUI模拟num8按键(试过pag.press()、pag.hold()、pag.keyDown()+pag.keyUp())完全没反应——WASD这类普通按键却能被MC正常接收,代码也确实进入了对应分支(控制台会打印torture)。
示例代码:
import pyautogui as pag from time import sleep def align_vertical_facing_axis(target): facing = get_facing_axes()[1] # 角色低头,需要触发抬头操作 if facing > target: print('torture') pag.keyDown('num8') sleep(1) pag.keyUp('num8')
解决办法
1. 修正按键名称
PyAutoGUI对小键盘按键的标准命名是numpad8而非num8,试试替换后再测试:
pag.keyDown('numpad8') sleep(1) pag.keyUp('numpad8')
也可以直接用按键的扫描码(num8对应扫描码72):
pag.press(72)
2. 以管理员身份运行脚本
Windows下部分游戏会限制普通权限程序的输入模拟,右键Python脚本或运行脚本的终端,选择「以管理员身份运行」后再执行。
3. 切换输入后端或换用其他库
PyAutoGUI默认的输入后端可能对特殊按键支持不足,强制切换到win32api后端试试,在脚本开头添加:
import pyautogui as pag # 强制使用win32api作为输入后端 pag._pyautogui_win._backend = pag._pyautogui_win.WIN32
如果还是不行,换用pynput库模拟按键,它对特殊按键的兼容性更好:
from pynput.keyboard import Controller, Key from time import sleep keyboard = Controller() # 确保Num Lock处于开启状态(根据NeatMouse需求调整) keyboard.press(Key.num_lock) keyboard.release(Key.num_lock) sleep(0.5) # 模拟按住小键盘8 keyboard.press(Key.numpad8) sleep(1) keyboard.release(Key.numpad8)
4. 确认Num Lock状态
NeatMouse的按键映射可能依赖Num Lock开启,先手动确认Num Lock是打开的,或者在脚本里先切换状态:
pag.press('numlock') sleep(0.5)
内容的提问来源于stack exchange,提问作者Denrey Christy
相关产品推荐
相关产品推荐

