【问题标题】:LSUIElement application be responsiveLSUIElement 应用程序响应式
【发布时间】:2012-09-14 18:28:06
【问题描述】:
我有一个应用程序,其中我将 LSUIElement 键设置为 1,以便它在后台运行并且不在 Dock 中显示图标。
我的意愿是让应用程序响应击键或鼠标事件。实际上主窗口仅在应用程序启动时出现。在主窗口可见的情况下,按键被正确处理,但如果我关闭它,就无法再次显示它(因此按键被忽略)。我希望我的应用程序在我按下特定组合键的任何时候都能做出响应(例如,Scribblet 为那些知道它的人所做的)。
谁能告诉我在哪里可以找到有关如何执行此操作的信息?
【问题讨论】:
标签:
macos
cocoa
background
【解决方案1】:
状态栏应用程序仅处于活动状态,因此您的应用程序只能在窗口或菜单已打开时接收事件。
您的应用程序可以通过设置Event Tap 来实现“热键”:
CGEventTapCreate(kCGSessionEventTap,
kCGTailAppendEventTap,
kCGEventTapOptionDefault,
kCGEventKeyDown
myEventTapCallback,
NULL);
这将允许您的应用程序在 keyDown 事件被路由到其他应用程序之前对其进行检查。请参阅Callbacks,了解您的回调函数的外观和行为方式。
在 GitHub 上还有一个由 Dave DeLong 编写的可能更易于使用的 Cocoa 类:DDHotKey。