我正在尝试使用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()
有人可以简要说明是否或何时添加最后两行是有用/推荐的?
答案 0 :(得分:1)
第一个很简单:the docs说:
事件点击通常在创建时启用。如果事件点击无响应,或者用户请求禁用事件点击,则会将kCGEventTapDisabled事件传递给事件点击回调函数。可以通过调用此函数重新启用事件抽头。
第二个可能是程序没有run loop(在当前线程上)的情况。例如,不使用NSApplication的命令行程序需要创建并运行自己的运行循环。