检测用户是否已启用此API的可靠方法是什么?
CGWindowListCreateImage即使禁用了屏幕录制API,也将返回有效对象。可能有多种组合(kCGWindowListOptionIncludingWindow,kCGWindowListOptionOnScreenBelowWindow),只有一些组合会返回NULL。
- (CGImageRef)createScreenshotImage
{
NSWindow *window = [[self view] window];
NSRect rect = [window frame];
rect.origin.y = NSHeight([[window screen] frame]) - NSMaxY([window frame]);
CGImageRef screenshot = CGWindowListCreateImage(
rect,
kCGWindowListOptionIncludingWindow,
//kCGWindowListOptionOnScreenBelowWindow,
0,//(CGWindowID)[window windowNumber],
kCGWindowImageBoundsIgnoreFraming);//kCGWindowImageDefault
return screenshot;
}
Run Code Online (Sandbox Code Playgroud)
唯一可靠的方法是CGDisplayStreamCreate冒险,因为Apple每年都会更改隐私设置。
- (BOOL)canRecordScreen
{
if (@available(macOS 10.15, *)) {
CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
;
});
BOOL canRecord = stream != NULL;
if (stream) …Run Code Online (Sandbox Code Playgroud) 我正在使用 XCode 中的 C++ 开发屏幕录制应用程序。问题是,当我编译并启动应用程序时,我总是必须在“设置 > 隐私”中授予屏幕录制权限。
有没有办法总是在 XCode 或类似的东西中授予权限?在开发/测试应用程序时,总是在重新编译时手动授予权限,这真的很烦人。