在 macOS Swift 中检测命令按键

问题描述

我正在使用事件监视器来快速检测按键事件。但是,事件监视器似乎没有检测到命令键或任何其他修饰键(shift、tab、opt ...)按下。是否有不同的方法来检测修饰键按下?。请注意,我不是在寻找一种可以通过使用 event.modifierFlags 来检测组合键(例如:cmd+r)的方法,而是一种知道何时单独按下命令键的方法

override func viewDidLoad() {
        super.viewDidLoad()
        NSEvent.addLocalMonitorForEvents(matching: .keyDown,handler: commandKey(evt:))
}

    func commandKey(evt: NSEvent) -> NSEvent{
        if evt.keyCode == 55 { //key code for command is 55
          print("commanded")
        }
        return evt
    }

解决方法

找到了解决办法。似乎 .flagsChanged 事件用于检测修饰键按下。

override func viewDidLoad() {
        super.viewDidLoad()
        NSEvent.addLocalMonitorForEvents(matching: .flagsChanged,handler: commandKey(evt:))
}

func commandKey(evt: NSEvent) -> NSEvent{
        if evt.modifierFlags.contains(.command){
            print("commanded")
        }
        return evt
}