小编典典

如何在macOS的Swift中全局检测击键?

swift

这是我尝试过的:

NSEvent.addGlobalMonitorForEvents(matching: [.keyDown]) { (event) in
    print(event.keyCode)
}

不幸的是,它不打印任何内容。

不,它不是一个重复的这个,这个问题是关于修饰键,我的问题是关于按键。


阅读 390

收藏
2020-07-07

共1个答案

小编典典

看起来“重复”标记已被删除,但是我将其汇总到注释部分中的答案也已删除。因此,对于后代:

之所以不起作用,是因为与其他一些事件处理程序相比,.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监视器正常工作。

2020-07-07