◆

Mac 微信截图快捷键无法使用的解决方法

2024-09-26 03:120

场景

更新微信后,使用快捷键进行截图一直弹窗提示微信由于 macOS 10.15 系统要求,请在“系统偏好设置-安全性与隐私-屏幕录制”中勾选微信。

那么我们跟着提现的弹窗点击到,屏幕录制中,发现微信是勾选的。

思考

是不是把勾选取消,再重新勾选就好了,经过验证,此方案不可行

解决方法

勾选微信,在左下角点击 - 把微信移除掉,然后重新添加即可

具体路径(Ventura 及之后):

系统设置 → 隐私与安全性 → 屏幕录制(新版本叫 屏幕录制与系统录音)→ 在列表里选中微信 → 点下方的 - 移除 → 再点 + 从 /Applications 里重新添加 → 系统会要求退出并重新打开微信

Monterey 及之前是 系统偏好设置 → 安全性与隐私 → 隐私 标签页 → 左侧 屏幕录制,右下角有个锁要先点开输密码才能改。

为什么「取消勾选再勾上」不管用

这个问题的根源在 macOS 的权限记录方式,理解了就知道为什么必须删掉重加。

macOS 的隐私权限存在一个叫 TCC(Transparency, Consent, and Control)的数据库里,路径是:

/Library/Application Support/com.apple.TCC/TCC.db          # 系统级
~/Library/Application Support/com.apple.TCC/TCC.db         # 用户级

这个库里每条记录不只存「应用的 Bundle ID + 权限类型 + 是否允许」,还存了一份该应用的代码签名摘要(csreq 字段)。系统在应用请求权限时会做两件事:查 Bundle ID 对应的记录,以及校验当前应用的签名是否和记录里存的那份一致。

微信更新之后,新版本的二进制被重新签名了。虽然 Bundle ID(com.tencent.xinWeChat)没变,签名摘要变了。于是:

  • 权限列表里显示「微信已勾选」——因为记录还在,Bundle ID 匹配
  • 但实际请求权限时校验失败——因为签名摘要不匹配
  • 系统于是拒绝授权,微信收到拒绝,弹出「请在系统偏好设置里勾选」的提示

这就形成了那个死循环:界面上明明勾着,实际上没权限。

取消勾选再勾上为什么不行:那个勾选框只翻转 allowed 字段的值,不更新 csreq 里的签名摘要。所以校验依然失败。

删掉重加为什么行:删除是把整条记录删掉,重新添加时系统会重新读取当前应用的签名并写入新的摘要,校验就通过了。

这个机制不是 bug,是刻意的安全设计——防止恶意程序替换掉一个已经获得权限的应用来继承它的权限。代价就是应用更新后偶尔需要重新授权。

命令行的确认与重置方法

想确认某个权限的实际状态,可以用 tccutil。这是系统自带的工具,但功能有限(只能重置,不能查询):

# 重置微信的屏幕录制权限(下次启动会重新弹窗请求)
tccutil reset ScreenCapture com.tencent.xinWeChat

reset 后面的第一个参数是权限类型,常用的有:

  • ScreenCapture — 屏幕录制
  • Accessibility — 辅助功能(控制其它应用)
  • Microphone — 麦克风
  • Camera — 摄像头
  • AppleEvents — 自动化(用 AppleScript 控制其它应用)
  • SystemPolicyAllFiles — 完全磁盘访问
  • ListenEvent — 输入监控(读取键盘事件)

不加 Bundle ID 会重置该类型下所有应用的权限:

# 谨慎:会清掉所有应用的屏幕录制授权,之后每个都要重新授权一遍
tccutil reset ScreenCapture

这条命令我一般不用,因为清掉之后录屏软件、会议软件、截图工具都要重新走一遍授权流程,还不如在图形界面里精确处理一个。

查 Bundle ID 的方法:

osascript -e 'id of app "WeChat"'

或者直接读 Info.plist:

defaults read /Applications/WeChat.app/Contents/Info.plist CFBundleIdentifier

需要说明的是,直接读写 TCC.db 是被 SIP(系统完整性保护)挡住的,即便用 sudo 也不行。网上有些教程教你关掉 SIP 去改这个库,不建议这么做——SIP 是 macOS 安全模型的核心,关掉它相当于把系统防护整体降级,而这个问题用图形界面就能解决,代价完全不对等。

微信截图的其它几个坑

微信这个截图功能(默认 Command + Shift + A)除了权限问题,还有几个常见故障:

1. 快捷键被别的应用抢了。Command + Shift + A 是个热门组合,Xcode、QQ、钉钉、以及一些 IDE 都会占用。判断方法:在微信设置 → 快捷键里换一个组合试试,能用就是冲突。

系统级快捷键的占用情况在 系统设置 → 键盘 → 键盘快捷键 里能翻到,但第三方应用的全局快捷键不在这里显示,只能一个个试。

2. 微信没在前台时快捷键不生效。微信的截图快捷键是全局的,需要「输入监控」权限(ListenEvent)才能在后台捕获按键。如果只给了屏幕录制没给输入监控,表现就是:微信在前台时能截,切到别的应用就失效。检查 系统设置 → 隐私与安全性 → 输入监控。

3. 多显示器下截图区域错位。这是微信自己的 bug,在混合 DPI(一个 Retina 一个普通屏)的环境下比较容易触发。没有可靠的解决办法,只能用系统截图代替。

建议:直接用系统截图

说实话,为了微信截图折腾权限不太划算,因为 macOS 自带的截图已经足够好用,而且没有任何权限问题(它是系统组件):

  • Command + Shift + 3 — 截整屏
  • Command + Shift + 4 — 截选区,按空格可以切换成「截单个窗口」(窗口会高亮,带阴影)
  • Command + Shift + 5 — 打开截图工具栏,可以选录屏、定时截图、以及配置保存位置
  • Command + Shift + 6 — 截触控栏(有触控栏的机型)

加上 Control 键(比如 Control + Command + Shift + 4)是截到剪贴板而不是存成文件,直接粘贴到聊天窗口,这个是我用得最多的。

截图后左下角会出现缩略图,点它可以立刻标注(画箭头、写字、打马赛克),标注完拖到聊天窗口就发出去了。这套流程比微信的截图工具更完整。

改截图的默认保存位置(默认在桌面,很容易堆满):

# 先建好目录
mkdir -p ~/Pictures/Screenshots
# 设置为默认保存位置
defaults write com.apple.screencapture location ~/Pictures/Screenshots
killall SystemUIServer

去掉截图的窗口阴影(截窗口时那圈灰边,贴到文档里比较占地方):

defaults write com.apple.screencapture disable-shadow -bool true
killall SystemUIServer

改截图格式(默认 png,改成 jpg 体积小很多):

defaults write com.apple.screencapture type jpg
killall SystemUIServer

这几条都可以用 defaults delete 恢复默认,比如 defaults delete com.apple.screencapture disable-shadow。killall SystemUIServer 只是重启菜单栏进程让设置生效,不影响正在运行的应用。

需要更强的标注和取色功能,第三方工具里 Snipaste(免费)和 CleanShot X(付费)是常见选择。Snipaste 的贴图功能(把截图钉在屏幕上)在对照两处代码时很实用。

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEMac 微信截图快捷键无法使用的解决方法加载中