【发布时间】:2022-01-28 14:12:29
【问题描述】:
我正在构建一个需要监控全局击键的 macOS 应用程序。所以全局事件监听器是:
NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { (event) in
print(event.keyCode)
}
但这并没有像this thread 中提到的那样。我确实通过添加尝试了线程中给出的答案:
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)
if !accessEnabled {
print("Access Not Enabled")
} else {
print("Access Granted")
}
这会提示对话框请求访问,但由于它是一个异步过程,因此授予访问权限仍然不会将线程移动到我可以监控击键的位置。此外,每次启动应用程序时都会弹出这个对话框,如何轻松地管理这种优雅的可访问性请求,因为据我搜索,任何地方都没有适当的文档。
【问题讨论】:
-
您是否在隐私设置中为您的应用启用了辅助功能?一旦允许它不会再次提示
-
我确实在设置中允许了它。不管它再次提示,我去检查一下,我已经给了它许可。提示总是在构建和运行时弹出
-
我在 macOS Monterey 12.2 上,它第一次提示访问,我启用了可访问性。第二次启动不提示访问,按键被捕获。我通过 Xcode 直接运行源代码
-
@RTXGamer 感谢您提供此信息。原来,这是一个 macOS 错误(检查答案)
标签: swift macos cocoa appkit keystroke