这是我尝试过的:
NSEvent.addGlobalMonitorForEvents(matching: [.keyDown]) { (event) in
print(event.keyCode)
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有打印任何东西.
不,这不是重复,这个问题是关于修饰键,我的问题是关键击.
看起来"重复"标记已被删除,但我在评论部分中的答案也是如此.因此,后人:
这不起作用的原因是因为.keyDown事件的全局监视器需要比一些其他事件处理程序更多的权限,包括有人认为这是重复的事件.这主要是因为全局.keyDown监视器可用于恶意目的,例如键盘记录器.所以有额外的安全措施来确保我们合法:
1)您的应用需要进行代码签名.
2)您的应用需要未启用的应用沙盒,并且:
3)您的应用程序需要在"辅助功能"下的"安全和隐私"偏好设置面板中注册.
这些东西中的第三个必须由用户启用,但您可以使用以下代码在该方向上轻推它们:
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)
if !accessEnabled {
print("Access Not Enabled")
}
Run Code Online (Sandbox Code Playgroud)
这将提示用户,让他/她选择自动打开相应的首选项窗格,用户可以通过辅助功能API允许您的应用程序控制计算机,假设您的应用已签名而非沙盒,则允许您的全局.keyDown监视器工作.
| 归档时间: |
|
| 查看次数: |
1511 次 |
| 最近记录: |