【问题标题】:Capture Global Keydown Events (not simply observe)捕获全局按键事件(不仅仅是观察)
【发布时间】: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 框架。我试试看。

标签: swift cocoa swift2


【解决方案1】:

DDHotKey 允许您捕获 keydown 事件并使用它们来触发您应用中的功能。我最近在this post 发现了它。如果您还不知道如何将 Objective-C 代码集成到 Swift 项目中,可以查找 Apple 文档here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2022-01-13
    • 2012-04-10
    • 2012-10-22
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多