Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Cocoa应用程序中将系统事件捕获为Cmd选项卡或聚光灯_Cocoa_Macos_Spotlight_Alt Tab - Fatal编程技术网

在Cocoa应用程序中将系统事件捕获为Cmd选项卡或聚光灯

在Cocoa应用程序中将系统事件捕获为Cmd选项卡或聚光灯,cocoa,macos,spotlight,alt-tab,Cocoa,Macos,Spotlight,Alt Tab,在Cocoa应用程序中,我试图找到一种方法来捕捉系统事件,比如通常使用Cmd Tab或spotlight启动的应用程序切换器,通常由Cmd Space启动。我正在寻找一种方法来捕捉关键事件,或者任何其他方法来告诉我这些事件中的一个即将发生,理想情况下取消它 苹果屏幕共享远程桌面应用程序做到了这一点,所以这应该是可能的。它捕获这些事件并将它们发送到连接的远程计算机 以下是我已经尝试过的: 在NSApplication中使用sendEvent方法捕获事件。我看到了所有的事件,比如Cmd键和Tab键

在Cocoa应用程序中,我试图找到一种方法来捕捉系统事件,比如通常使用Cmd Tab或spotlight启动的应用程序切换器,通常由Cmd Space启动。我正在寻找一种方法来捕捉关键事件,或者任何其他方法来告诉我这些事件中的一个即将发生,理想情况下取消它

苹果屏幕共享远程桌面应用程序做到了这一点,所以这应该是可能的。它捕获这些事件并将它们发送到连接的远程计算机

以下是我已经尝试过的:

  • 在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沙盒规则可以吗?