Python实现左右鼠标同时按下下移鼠标时程序冻结问题如何解决
解决方案
核心原因
代码触发冻结和全屏失效有两个核心诱因:
- 无限循环无任何延时,短时间内高频调用系统输入API占满Windows输入事件队列,导致进程被系统阻塞
- 普通权限运行脚本时,Windows的用户界面特权隔离机制会阻止低权限进程向高权限全屏窗口发送输入事件,要么功能失效要么触发异常阻塞
修复方案
1. 给循环添加毫秒级延时
在循环末尾添加极短的休眠时间,避免占满CPU同时防止输入队列溢出,修改后可运行代码示例:
import win32api import win32con import time while True: if win32api.GetAsyncKeyState(1) < 0 and win32api.GetAsyncKeyState(2) < 0: print("Both pressed") win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 0, 1, 0, 0) print("Move executed") # 1毫秒延时,可根据移动精度需求调整大小 time.sleep(0.001)
2. 以管理员权限运行脚本
右键点击运行脚本的命令提示符/ Python脚本文件,选择「以管理员身份运行」,即可解决全屏应用场景下功能失效的问题。
3. 可选优化(避免重复状态触发)
如果需要区分按键按下/释放的状态切换,避免重复执行状态初始化逻辑,可以添加状态锁:
import win32api import win32con import time press_state = False while True: lmb_down = win32api.GetAsyncKeyState(1) < 0 rmb_down = win32api.GetAsyncKeyState(2) < 0 if lmb_down and rmb_down: if not press_state: print("Buttons pressed, start moving") press_state = True win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 0, 1, 0, 0) else: if press_state: print("Buttons released") press_state = False time.sleep(0.001)
内容的提问来源于stack exchange,提问作者Russell
相关产品推荐
相关产品推荐

