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

Python按键脚本在FNaF:UCN游戏中失效的解决求助

游戏窗口内脚本失效的解决方案
  • 以管理员身份运行脚本
    多数游戏会拦截普通权限程序的输入模拟,右键点击Python解释器或脚本文件,选择「以管理员身份运行」,这是解决问题的基础前提。

  • 修复脚本的线程与按键逻辑缺陷
    原脚本存在两个核心问题:按住右键时会重复创建按键线程,导致重复触发;仅调用按键按下操作而不释放,游戏无法识别完整的按键事件。修改后的代码如下:

    import keyboard
    from pynput.keyboard import Key, Controller
    from pynput.mouse import Listener, Button
    import threading
    import time
    
    keyboard_controller = Controller()
    is_holding_right = False
    press_thread = None
    
    def press_keys_loop():
        global is_holding_right
        while is_holding_right:
            # 模拟完整的按下+释放循环,确保游戏捕获有效按键事件
            keyboard_controller.press(Key.enter)
            keyboard_controller.press('c')
            time.sleep(0.05)
            keyboard_controller.release('c')
            keyboard_controller.release(Key.enter)
            time.sleep(0.05)
    
    def on_mouse_click(x, y, button, pressed):
        global is_holding_right, press_thread
        if button == Button.right:
            is_holding_right = pressed
            if pressed:
                # 仅在首次按下时启动线程,避免重复创建
                if press_thread is None or not press_thread.is_alive():
                    press_thread = threading.Thread(target=press_keys_loop, daemon=True)
                    press_thread.start()
                    print("Started pressing keys...")
            else:
                # 退出时确保所有按键完全释放
                keyboard_controller.release(Key.enter)
                keyboard_controller.release('c')
                print("Stopped pressing keys.")
    
    def main():
        with Listener(on_click=on_mouse_click) as listener:
            print("Script running. Press 'x' to exit.")
            keyboard.wait('x')
            # 退出前清理按键状态
            keyboard_controller.release(Key.enter)
            keyboard_controller.release('c')
            print("Exitted.")
    
    if __name__ == "__main__":
        main()
    
  • 使用更底层的输入模拟库
    若pynput仍无法生效,可尝试pyautogui(先执行pip install pyautogui安装),它的输入模拟更贴近系统底层,对游戏兼容性更好。替换按键循环部分代码:

    import pyautogui
    
    def press_keys_loop():
        global is_holding_right
        while is_holding_right:
            pyautogui.keyDown('enter')
            pyautogui.keyDown('c')
            time.sleep(0.05)
            pyautogui.keyUp('c')
            pyautogui.keyUp('enter')
            time.sleep(0.05)
    
  • 调整游戏窗口模式
    将游戏从「全屏独占模式」切换为「窗口化全屏」或「窗口模式」。独占模式下游戏会直接接管输入设备,系统级输入模拟难以穿透,切换窗口模式后再测试脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:31:02