怎么能检测到Mission Control或Command-Tab切换器取代OS X中的一个程序?

bit*_*her 18 cocoa core-graphics

我正在尝试在程序中使用CGAssociateMouseAndMouseCursorPosition(NO).当您的应用程序处于"前台"时,这将断开鼠标与屏幕光标的连接.不幸的是,当Mission Control或应用程序切换器或谁知道还有什么问题时,它也会断开连接.

到目前为止,我知道:

  • 该应用程序仍然有效.
  • 窗口仍然是关键.
  • 当这些事情出现时,没有任何东西被发送到默认通知中心.
  • 应用程序停止接收鼠标移动事件,但NSEvent addGlobalMonitorForEventsMatchingMask:handler:也没有收到它们,这至少可以说是奇怪的.它应该接收未发送到我的应用程序的任何事件.(我计划检测丢失的事件,以便知道何时再次关联鼠标.

那么,有没有办法检测我的应用程序何时不再受控制,特别是因为Mission Control或交换机接管了?他们真的希望鼠标能够工作,我需要恢复它们的关联.

Ken*_*ses 5

我对全局事件监视器没有看到事件感到惊讶。在类似情况下,出于类似目的,我使用了Quartz Event Tap。可可全局事件监视器与事件水龙头非常相似,因此我认为它可以工作。

我轻按一下,kCGAnnotatedSessionEventTap然后对结果CGEventGetIntegerValueField(event, kCGEventTargetUnixProcessID)进行比较,getpid()以确定事件何时将转移到另一个应用程序(例如,Mission Control或Exposé)。(当我的应用程序退出活动状态时,我会禁用该标签,因此当呈现此类叠加界面时,它应仅接收发往另一个应用程序的事件。)

顺便说一句,您提到了监视默认的通知中心,但是,如果有关于任务控制之类的通知,则更有可能到达分布式通知中心(NSDistributedNotificationCenter)。因此,值得检查一下。