【问题标题】:Enabling Screen-Recording API in Catalina (kCGWindowName)在 Catalina (kCGWindowName) 中启用屏幕录制 API
【发布时间】:2019-12-14 16:29:59
【问题描述】:

以下代码在 Mojave 中运行良好。

let options = CGWindowListOption(arrayLiteral: CGWindowListOption.excludeDesktopElements, CGWindowListOption.optionOnScreenOnly, CGWindowListOption.optionOnScreenAboveWindow)
let windowList = CGWindowListCopyWindowInfo(options, kCGNullWindowID) as NSArray? as? [[String: AnyObject]]

for entry  in windowList!
{ let name = (entry[kCGWindowName as String] != nil) ? entry[kCGWindowName as String] as! String : ""
  ...

在卡塔利娜

entry[kCGWindowName as String] 

总是零

在 SO:Detecting screen recording settings on macOS Catalina 我读到,启用“屏幕录制 API”以及如何检测(如果已启用)不需要这样做。

很遗憾,我不知道如何启用“屏幕录制API”。

如 SO 中所述:macOS Catalina screen recording permission 我打开了自动代码签名。

在“系统偏好设置”中,我看不到“+”来添加应用程序,以授予“屏幕录制”权限。

如何授予录屏API权限?

【问题讨论】:

  • 我的情况有所不同,因为我通过 nodejs 使用 javascript,但我觉得它是相关的。我在使用空窗口名称时遇到了同样的问题。你可以在这里查看代码:github.com/karaggeorge/mac-screen-capture-permissions,它最终使我能够在 catalina 中请求屏幕录制权限。我的应用现在有屏幕录制权限,但仍然无法获取窗口名称。
  • 我收回!我有一个不相关的错误。我可以确认获取窗口名称在获得许可的情况下工作,没有它就会失败。

标签: macos cocoa macos-catalina screen-recording


【解决方案1】:

这是一个请求访问屏幕录制的低级 API。调用此函数将提示您授予屏幕录制权限。

/* Requests event listening access if absent, potentially prompting */
@available(macOS 10.15, *)
public func CGRequestScreenCaptureAccess() -> Bool

【讨论】:

  • 请注意@available(macOS 10.15, *) 不正确。它在卡特琳娜上崩溃了。仅适用于大苏尔
【解决方案2】:

您需要调用任何屏幕录制 API 函数。例如截图:

(void)showScreenRecordingPrompt {
  /*
   macos 10.14 and lower do not require screen recording permission 
   to get window titles 
  */
  if(@available(macos 10.15, *)) {
    /*
     To minimize the intrusion just make a 1px image of the upper left corner
     This way there is no real possibilty to access any private data
    */
    CGImageRef screenshot = CGWindowListCreateImage(
        CGRectMake(0, 0, 1, 1),
        kCGWindowListOptionOnScreenOnly,
        kCGNullWindowID,
        kCGWindowImageDefault);

    CFRelease(screenshot);

}

解决方案来自这里:https://blog.csdn.net/lovechris00/article/details/96979960

【讨论】:

    猜你喜欢
    • 2019-10-29
    • 2019-07-27
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多