addGlobalMonitorForEventsMatchingMask funktioniert nicht

Ich habe Probleme damit, eine assistivfähige Anwendung (XCode im Entwicklungsfall) zum Erfassen globaler keyDown-Ereignisse zu erhalten. Ich habe viele Codebeispiele wie die folgenden gesehen, aber das funktioniert bei mir unter 10.9.4 nicht.

#import <AppKit/AppKit.h>
#import <Foundation/Foundation.h>

// 10.9+ only, see this url for compatibility:
// http://stackoverflow.com/questions/17693408/enable-access-for-assistive-devices-programmatically-on-10-9
BOOL checkAccessibility()
{
  NSDictionary* opts = @{(__bridge id)kAXTrustedCheckOptionPrompt: @YES};
  return AXIsProcessTrustedWithOptions((__bridge CFDictionaryRef)opts);
}

int main(int argc, const char * argv[])
{
  @autoreleasepool {
    if (checkAccessibility()) {
        NSLog(@"Accessibility Enabled");
    }
    else {
        NSLog(@"Accessibility Disabled");
    }

    NSLog(@"registering keydown mask");
    [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask
                                           handler:^(NSEvent *event){
                                               NSLog(@"keydown: %@", event.characters);

                                           }];

      NSLog(@"entering run loop.");
      [[NSRunLoop currentRunLoop] run];
    }
    return 0;
}

Die empfangene Ausgabe ist:

2014-08-25 17:26:36.054 test[64725:303] Accessibility Enabled
2014-08-25 17:26:36.055 test[64725:303] registering keydown mask
2014-08-25 17:26:36.067 test[64725:303] entering run loop.

Sobald ich hier bin, erfolgt keine weitere Protokollierung, unabhängig davon, welche Tasten ich drücke oder welche Anwendung den Fokus hat, wenn ich sie drücke.

FWIW, ich versuche, eine Hilfsanwendung zu schreiben, keinen Key-Logger oder eine andere böse Sache. Ich habe mir die anderen Fälle dieser Frage angesehen, aber sie scheinen entweder damit umzugehen, dass 1) die Anwendung nicht für die Unterstützung aktiviert ist oder 2) bestimmte 'spezielle' Befehlsschlüssel nicht empfangen werden, für deren Empfang CGEvents erforderlich wären. Ich sehe nichtirgendein Schlüssel, auch einfache (ich habe diesen Beitrag getippt und nichts wurde protokolliert). TIA!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage