以正确的方式创建CGEvent

时间:2017-11-13 13:28:08

标签: swift macos swift4 cgeventtap

我正在尝试使用SO和其他地方的示例来学习如何创建CGEvent tap。

我知道如何使用以下方式创建事件点按:

let eventTap = CGEvent.tapCreate(*/arguments to create the tap*/)

之后我跑

let runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, .commonModes)

我在网上找到的一些(但不是全部)示例还添加了以下两行

CGEvent.tapEnable(tap: eventTap, enable: true)
CFRunLoopRun()

有人可以简要说明是否或何时添加最后两行是有用/推荐的?

1 个答案:

答案 0 :(得分:1)

第一个很简单:the docs说:

  

事件点击通常在创建时启用。如果事件点击无响应,或者用户请求禁用事件点击,则会将kCGEventTapDisabled事件传递给事件点击回调函数。可以通过调用此函数重新启用事件抽头。

第二个可能是程序没有run loop(在当前线程上)的情况。例如,不使用NSApplication的命令行程序需要创建并运行自己的运行循环。