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

Python如何模拟空格键双击 实现Minecraft服务器飞行权限快速触发

问题

我在为一款Minecraft服务器编写自动化机器人,该服务器设定为双击空格键即可授予飞行权限,但始终无法实现符合要求的空格键双击模拟,遇到的问题如下:

  • 首次按键未正常释放导致触发失败
  • 按键间隔过长,无法在最长1.3秒的有效时间窗口内激活飞行效果

此前尝试过的方案均未生效:

  • 查找win32com、pyautogui等模块中对应空格键的字符串标识,自行调试、检索网络资料都没拿到正确结果
  • 调用keyboard.release('space')模拟手指松开空格键的操作,但执行速度过慢,无法成功触发飞行权限

当前使用的测试代码:

from pyautogui import *
import pyautogui
import time
import keyboard
import random
import win32api, win32con


import win32com.client as comclt
wsh = comclt.Dispatch("WScript.Shell")
wsh.AppActivate("Crystal Client (v1.8.9-d9d3740/main)") 
wsh.SendKeys("{Esc}")
keyboard.press('space')
keyboard.press('space')
keyboard.press('space')

问题原因

现有代码存在两个核心错误:

  1. 仅连续调用keyboard.press('space'),没有配套的释放操作,相当于一直按住空格键,系统根本不会识别为两次独立的按键点击
  2. 所用的keyboard库、WScript.Shell的SendKeys都属于高层封装接口,调用链路长、延迟高,很容易超出服务器要求的1.3秒判定窗口,部分客户端反作弊也会拦截这类高层模拟的输入。

解决方案

直接调用系统底层的win32api接口发送按键消息,不需要依赖高层库的按键字符串映射,从根源上避免空格标识写错、释放延迟高的问题,延迟可以稳定控制在毫秒级,完全符合1.3秒的判定窗口要求。
首先明确两个基础逻辑:

  • 真实的按键动作必须包含「按下」+「释放」两个步骤,缺任何一个都不会被识别为有效点击
  • 空格键对应的Windows虚拟键码固定为0x20,不需要适配不同库的字符串规则(比如pyautogui、keyboard、WScript.Shell对空格的标识写法都不一样,直接用虚拟键码可以完全避开这个问题)

可直接运行的代码如下:

import win32api
import win32con
import win32com.client as comclt
import time

# 常量定义
VK_SPACE = 0x20  # 空格键系统虚拟键码
KEY_PRESS_DURATION = 0.03  # 单次按键按住时长,30毫秒足够模拟真实人手点击
DOUBLE_CLICK_GAP = 0.15  # 两次按键间隔,150毫秒远小于1.3秒的判定窗口
WINDOW_TITLE = "Crystal Client (v1.8.9-d9d3740/main)"

def single_space_press():
    # 发送空格按下消息
    win32api.keybd_event(VK_SPACE, 0, 0, 0)
    time.sleep(KEY_PRESS_DURATION)
    # 发送空格释放消息
    win32api.keybd_event(VK_SPACE, 0, win32con.KEYEVENTF_KEYUP, 0)

if __name__ == "__main__":
    wsh = comclt.Dispatch("WScript.Shell")
    # 激活游戏窗口
    wsh.AppActivate(WINDOW_TITLE)
    time.sleep(0.1)
    # 关闭可能打开的GUI菜单
    wsh.SendKeys("{Esc}")
    time.sleep(0.1)
    # 执行双击空格逻辑
    single_space_press()
    time.sleep(DOUBLE_CLICK_GAP)
    single_space_press()

调优提示

  • 如果触发失败,可以逐步调整DOUBLE_CLICK_GAP参数,在0.1秒到1.2秒区间内测试,建议不要超过1秒留足冗余
  • 不要混用pyautogui、keyboard库的按键方法,这类高层库的模拟延迟普遍在几十到上百毫秒,很容易超时
  • 如果客户端装了反作弊,可以把KEY_PRESS_DURATION调到0.05-0.1秒,更接近真实人手的按键时长,避免被判定为模拟输入

内容的提问来源于stack exchange,提问作者TonyofIDK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:27:18