macOS上Screen Record权限的问题

本文介绍了在macOS Catalina及更高版本中如何检测和管理应用程序的屏幕录制权限。通过CGWindowListCopyWindowInfo和CGDisplayStream等API,可以判断用户是否已授权屏幕录制。如果权限缺失,应用会提示用户前往系统偏好设置进行授权。此外,代码示例展示了如何获取桌面背景窗口的唯一标识符,并强调了在获取窗口元数据时尊重用户隐私的重要性。

屏幕捕捉权限检测

#include <AppKit/AppKit.h>
#include <libproc.h>

bool isScreenRecordingEnabled()
{
   
   
    if (@available(macos 10.15, *)) {
   
   
        bool bRet = false;
        CFArrayRef list = CGWindowListCopyWindowInfo(kCGWindowListOptionAll, kCGNullWindowID);
        if (list) {
   
   
            int n = (int)(CFArrayGetCount(list));
            for (int i = 0; i < n; i++) {
   
   
                NSDictionary* info = (NSDictionary*)(CFArrayGetValueAtIndex(list, (CFIndex)i));
                NSString* name = info[(id)kCGWindowName];
                NSNumber* pid = info[(id)kCGWindowOwnerPID];
                if (pid != nil && name != nil) {
   
   
                    int nPid = [pid intValue];
                    char path[PROC_PIDPATHINFO_MAXSIZE+1];
                    int lenPath = proc_pidpath(nPid, path, PROC_PIDPATHINFO_MAXSIZE);
                    if (lenPath > 0) {
   
   
                        path[lenPath] = 0;
                        if (strcmp(path, "/System/Library/CoreServices/SystemUIServer.app/Contents/MacOS/SystemUIServer") == 0) {
   
   
                            bRet = true;
                            break;
                        
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值