这是我尝试过的:
NSEvent.addGlobalMonitorForEvents(matching: [.keyDown]) { (event) in
print(event.keyCode)
}
不幸的是,它没有打印任何东西。
不,它不是 this 的副本,那个问题是关于修饰键的,我的问题是关于击键的。
最佳答案
看起来“重复”标记已被删除,但我在评论部分的答案也已删除。所以,为了后代:
这不起作用的原因是因为 .keyDown 事件的全局监视器需要比其他一些事件处理程序更多的权限,包括有人认为这是重复的事件处理程序。这主要是因为全局 .keyDown 监视器可用于恶意目的,例如键盘记录器。因此,我们采取了额外的安全措施来确保我们的合法性:
1) 您的应用需要进行代码签名。
2) 您的应用需要不启用应用沙盒,并且:
3) 您的应用需要在辅助功能下的安全和隐私首选项面板中注册。
这些东西中的第三个必须由用户启用,但您可以使用以下代码将它们推向那个方向:
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)
if !accessEnabled {
print("Access Not Enabled")
}
这将提示用户,让他/她可以选择自动打开适当的首选项面板,用户可以在其中允许您的应用程序通过辅助功能 API 控制计算机,假设您的应用程序已签名且未沙盒化,允许您的全局 .keyDown 监视器工作。
关于swift - 如何在 macOS 上的 Swift 中全局检测击键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45986756/