抢下 Win+Shift+S:七千六百行 Python 截图工具踩过的坑
来源:dev.to — 2026-11-07
📋 概述
作者只想要一件事:按 Win+Shift+S 打开自己的截图工具而不是系统截图。结果长成七千六百行的 PyQt 项目,以及一堆散落在各处的 Windows 内部细节。文章挑出最耗头发的四处:系统保留快捷键无法用 RegisterHotKey 注册、必须用低级键盘钩子抢先、吞键之后还要处理松键与开始菜单、以及 Python 录系统音频得换库并放弃实时混音。
🔑 核心要点
RegisterHotKey 抢不到 Win+Shift+S ,因为该组合被 shell 保留,只能改用 WH_KEYBOARD_LL 低级钩子提前截获。
钩子回调必须保持引用 ,一旦被垃圾回收,下一次按键时进程直接死掉,没有 traceback。
只吞掉 S 键不够:还要注入未分配的虚拟键 0xE8 ,否则用户松开 Win 时开始菜单会弹出来。
麦克风用 sounddevice,系统音频环回只能用 PyAudioWPatch ;录音时先各自存 WAV,事后用 ffmpeg amix 混一次,避免两个时钟互相漂移。
💡 金句
“If `HOOKPROC(cb)` gets garbage-collected, your app crashes on the next keypress. There's no traceback, it just dies.”译:如果钩子回调被垃圾回收,你的应用会在下一次按键时崩溃。没有 traceback,它就这么死了。
👍 0
❤️ 点赞
👎 0
沉底
← 返回 dev.to 首页