You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:50:34