在Cocoa应用程序中将系统事件捕获为Cmd-Tab或Spotlight

Jee*_*yus 5 macos cocoa spotlight alt-tab

在Cocoa应用程序中,我试图找到一种方法来捕获系统事件,例如通常使用Cmd-Tab或聚光灯启动的应用程序切换器,通常由Cmd-Space启动.我正在寻找一种方法来捕捉关键事件或任何其他方式告诉我其中一个事件即将发生,并理想地取消它.

Apple Screen Sharing远程桌面应用程序可以实现,因此它应该是可行的.它捕获这些事件并将它们发送到连接的远程计算机.

这是我已经尝试过的:

  • 使用NSApplication中的sendEvent方法捕获事件.我看到所有的事件,比如Cmd keydown,Tab keydown,但当两者都被按下时,我什么也看不见.
  • 注册Carbon Hot key侦听器.我可以注册像Cmd + Q这样的东西,但是当我注册Cmd + Tab时,它没有响应.

还有其他想法吗?

Jee*_*yus 2

找到了!在我的 WindowViewController.m 文件中

#import <Carbon/Carbon.h>

void *oldHotKeyMode;

- (void)windowDidBecomeKey:(NSNotification *)notification{
    oldHotKeyMode = PushSymbolicHotKeyMode(kHIHotKeyModeAllDisabled);
}
- (void)windowDidResignKey:(NSNotification *)notification{
    PopSymbolicHotKeyMode(oldHotKeyMode);
}
Run Code Online (Sandbox Code Playgroud)

这真是太神奇了!并且它通过了 Mac App Store 的新 Apple 沙箱要求!