如何在macOs中禁用键盘输入?

时间:2017-01-30 09:18:29

标签: swift macos cocoa keyboard

我想创建一个强制用户在特定时间休息的应用。 我找不到办法做到这一点。到目前为止,我正要使用CGEvent在按下某个键时重新发送通知,但仅适用于鼠标输入。

 let eventMask = CGEventType.keyDown.rawValue //| (1 << CGEventType.keyUp.rawValue)
    guard let eventTap = CGEvent.tapCreate(tap: .cgSessionEventTap,
                                           place: .headInsertEventTap,
                                           options: .defaultTap,
                                           eventsOfInterest: CGEventMask(eventMask),
                                           callback: myCGEventCallback,
                                           userInfo: nil) else {
                                            print("failed to create event tap")
                                            exit(1)
    }




    let runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0)
    CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, .commonModes)
    CGEvent.tapEnable(tap: eventTap, enable: true)
    CFRunLoopRun()

设置哪个事件掩码无关紧要,只有鼠标操作才会触发回调。

所以我的问题分为两部分:

  1. 为什么上面的代码不会在keydown上触发
  2. 是否有其他方法可以完成该任务?
  3. 感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用CGEventTap执行此操作,但它要求在“系统偏好设置 - 安全性”和“安全性”中为应用程序提供辅助功能权限。隐私 - 隐私 - 辅助功能&#34;。

有关完整示例,请参阅this answer

如果您需要帮助将其转换为Swift,请与我们联系。