以下是我的尝试:
NSEvent.addGlobalMonitorForEvents(matching: [.keyDown]) { (event) in
print(event.keyCode)
}
不幸的是,它不会打印任何内容。
不,它不是this的重复,那个问题是关于修饰键,我的问题是关键击。
答案 0 :(得分:5)
看起来"重复"标记被删除了,但我在评论部分的答案也是如此。所以,对后人来说:
这不起作用的原因是因为.keyDown事件的全局监视器需要比一些其他事件处理程序更多的权限,包括有人认为这是重复的事件。这主要是因为全局.keyDown监视器可用于恶意目的,例如键盘记录器。因此,还有其他安全措施可以确保我们合法:
1)您的应用需要进行代码签名。
2)您的应用需要不启用App Sandbox,并且:
3)您的应用需要在“辅助功能”下的“安全和隐私”偏好设置面板中注册。
用户必须启用这些内容中的第三项,但您可以使用以下代码轻轻推动它们:
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)
if !accessEnabled {
print("Access Not Enabled")
}
这将提示用户,让他/她选择自动打开相应的首选项窗格,用户可以通过辅助功能API允许您的应用程序控制计算机,假设您的应用已签名而非沙盒,允许您的全局.keyDown监视器工作。
答案 1 :(得分:0)
如果您只需要全局热键支持,则所有这些都是不必要的(而不是所有随机键或鼠标事件),您可以使用热键API轻松完成。看看例如PTHotkey:)
或更新的api ..也见:How to implement shortcut key input in Mac Cocoa App?