gpt4 book ai didi

swift - 检测屏幕是否录制在macOS上

转载 作者:行者123 更新时间:2023-12-03 09:18:25 26 4
gpt4 key购买 nike

我正在寻找一种方法来检测当前是否正在录制屏幕。
理想情况下,开始/停止录制的事件。也许某种分布式通知。

我的用例是,我想在录制屏幕(选择启用)时隐藏我的应用程序的菜单栏项,因为它显示日期和时间,并且许多用户不希望屏幕记录中包含时间。

我尝试将NSWindow#sharingType窗口的 .none 设置为NSStatusBarButton,但是该选项似乎仅适用于屏幕截图。

答案应该是 swift 。

最佳答案

我有一个有效的答案,依靠AppleScript查询QuickTime Player。这需要一个用于运行时强化的沙盒应用程序的几个步骤,包括权利以及一个特殊的plist键,该键会提示用户授予对您的应用程序的访问权限以编写QuickTime Player脚本。

如果这些都不是破坏交易的方法,那么这是一个小类,该类可以检测到QuickTime Player是否正在运行,如果运行,则发送AppleScript来查询“屏幕录制”文档。如果正在进行屏幕录像(而不仅仅是打开等待录像),则文档的当前时间将大于0,并且脚本结果为true,否则为false。在尝试脚本之前,还会进行检查以查看QuickTime Player是否正在运行。如果不是,则返回false。

import Cocoa

class ScreenRecordingCheck {
static let qt_query_applescript = """
tell application id "com.apple.QuickTimePlayerX"
set isScreenRecording to false
repeat with doc in documents
set docname to name of doc
if docname is "Screen Recording" then
set doctime to current time of doc
set isScreenRecording to doctime is greater than 0.0
end if
end repeat
set result to isScreenRecording
end tell
"""

var scriptObj: NSAppleScript?

init() {
self.scriptObj = NSAppleScript(source: ScreenRecordingCheck.qt_query_applescript)
}

func isScreenRecordingActive() -> Bool {
var result = false
if !self.isQuicktimePlayerRunning() {
return false
}
if let script = self.scriptObj {
var errDictionary: NSDictionary?
let scriptResult = script.executeAndReturnError(&errDictionary)
if let err = errDictionary {
Swift.print("Error: " + String(describing:err))
} else {
result = scriptResult.booleanValue
}
}
return result
}

func isQuicktimePlayerRunning() -> Bool {
let qtapps = NSRunningApplication.runningApplications(withBundleIdentifier: "com.apple.QuickTimePlayerX")
return !qtapps.isEmpty
}
}

要在沙盒应用程序中启用此功能,您需要将此 key 添加到应用程序的Info.plist中:
<key>NSAppleEventsUsageDescription</key>
<string>Please give ScreenRecordingDetector access to Quicktime Player via Apple Script.</string>

...以及您应用程式的.entitlements文件中的这项:
<key>com.apple.security.temporary-exception.apple-events</key>
<string>com.apple.QuickTimePlayerX</string>

除了选中应用程序目标的“签名和功能”/“强化运行时”下的 Apple Events 复选框外。

关于swift - 检测屏幕是否录制在macOS上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60869477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com