1

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

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

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()

有人可以简要解释一下添加最后两行是否有用/何时有用/推荐?

4

1 回答 1

2

第一个很简单:文档说:

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

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

于 2017-11-14T00:54:04.087 回答