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
相关产品推荐
相关产品推荐

