【发布时间】:2016-03-08 15:46:04
【问题描述】:
我创建了一些全局热键。但是使用addGlobalMonitorForEventsMatchingMask 我只能观察到keydown 事件。如果我想捕获事件并阻止其他应用程序接收它怎么办?
这是我用于观察按键事件的内容:
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification) {
NSEvent.addGlobalMonitorForEventsMatchingMask(.KeyDownMask, handler: keyDown)
NSEvent.addLocalMonitorForEventsMatchingMask(.KeyDownMask) { (event) -> NSEvent! in
self.keyDown(event)
return event
}
}
func keyDown(event : NSEvent) {
if event.modifierFlags.contains(.ControlKeyMask) && event.modifierFlags.contains(.AlternateKeyMask) && event.modifierFlags.contains(.CommandKeyMask) && event.keyCode == 126 {
print("⌃⌥⌘↑ pressed")
}
}
}
我不确定从哪里开始捕获 keydown 事件。任何帮助都会很棒。谢谢。
【问题讨论】:
-
恐怕不行:“你只能观察事件;你不能修改或以其他方式阻止事件被传递到它的原始目标应用程序。”来源:NSEvent Class Reference
-
“事件点击可以在输入事件传递到前台应用程序之前从系统内的多个点监视和过滤输入事件。”来源:Quartz Event Services Reference
-
谢谢@Willeke。我从未尝试过使用 Quartz 框架。我试试看。