这是我尝试过的:
NSEvent.addGlobalMonitorForEvents(matching: [.keyDown]) { (event) in print(event.keyCode) }
不幸的是,它不打印任何内容。
不,它不是一个重复的这个,这个问题是关于修饰键,我的问题是关于按键。
看起来“重复”标记已被删除,但是我将其汇总到注释部分中的答案也已删除。因此,对于后代:
之所以不起作用,是因为与其他一些事件处理程序相比,.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监视器正常工作。