在Cocoa应用程序中将系统事件捕获为Cmd选项卡或聚光灯
在Cocoa应用程序中,我试图找到一种方法来捕捉系统事件,比如通常使用Cmd Tab或spotlight启动的应用程序切换器,通常由Cmd Space启动。我正在寻找一种方法来捕捉关键事件,或者任何其他方法来告诉我这些事件中的一个即将发生,理想情况下取消它 苹果屏幕共享远程桌面应用程序做到了这一点,所以这应该是可能的。它捕获这些事件并将它们发送到连接的远程计算机 以下是我已经尝试过的:在Cocoa应用程序中将系统事件捕获为Cmd选项卡或聚光灯,cocoa,macos,spotlight,alt-tab,Cocoa,Macos,Spotlight,Alt Tab,在Cocoa应用程序中,我试图找到一种方法来捕捉系统事件,比如通常使用Cmd Tab或spotlight启动的应用程序切换器,通常由Cmd Space启动。我正在寻找一种方法来捕捉关键事件,或者任何其他方法来告诉我这些事件中的一个即将发生,理想情况下取消它 苹果屏幕共享远程桌面应用程序做到了这一点,所以这应该是可能的。它捕获这些事件并将它们发送到连接的远程计算机 以下是我已经尝试过的: 在NSApplication中使用sendEvent方法捕获事件。我看到了所有的事件,比如Cmd键和Tab键
- 在NSApplication中使用sendEvent方法捕获事件。我看到了所有的事件,比如Cmd键和Tab键,但是当两者都按下时,我什么也看不到
- 注册碳素热键侦听器。我可以注册像Cmd+Q这样的任何东西,但同样,当我注册Cmd+Tab时,它没有响应
还有其他想法吗?请参阅。我将向您介绍如何捕获cmd+tab。但请注意,这将只在全屏模式下工作。我相信在窗口模式下没有办法做到这一点。代码非常简单。这是SDL mac代码的一个小补丁-在全屏模式下处理cmd+tab的更新
NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ];
if ( event == nil ) {
break;
}
if (([event type] == NSKeyDown) &&
([event modifierFlags] & NSCommandKeyMask)
&&([[event characters] characterAtIndex:0] == '\t')
{
do something here
}
找到了!
在我的WindowViewController.m文件中
#import <Carbon/Carbon.h>
void *oldHotKeyMode;
- (void)windowDidBecomeKey:(NSNotification *)notification{
oldHotKeyMode = PushSymbolicHotKeyMode(kHIHotKeyModeAllDisabled);
}
- (void)windowDidResignKey:(NSNotification *)notification{
PopSymbolicHotKeyMode(oldHotKeyMode);
}
#导入
void*oldHotKeyMode;
-(无效)windowDidBecomeKey:(NSNotification*)通知{
oldHotKeyMode=PushSymbolicChotKeyMode(kHIHotKeyModeAllDisabled);
}
-(无效)windowDidResignKey:(NSNotification*)通知{
PopSymbolicChotKeyMode(oldHotKeyMode);
}
这真是太神奇了!它通过了苹果对Mac应用商店的新沙盒要求 Appstore沙盒规则可以吗?