addGlobalMonitorForEventsMatchingMask не работает
У меня проблемы с получением вспомогательного приложения (XCode в случае разработки) для захвата глобальных событий keyDown. Я видел много примеров кода, подобных приведенному ниже, но это не работает для меня на 10.9.4.
#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;
}
Полученный результат:
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.
Оказавшись здесь, никакая другая регистрация не происходит, независимо от того, какие клавиши я нажимаю или какое приложение имеет фокус, когда я нажимаю их.
FWIW, я пытаюсь написать вспомогательное приложение, а не кейлоггер или другую злую вещь. Я рассмотрел другие случаи этого вопроса, но они, похоже, имеют дело либо с 1) приложением, не поддерживающим вспомогательную поддержку, либо 2) не получающим определенные «специальные» клавиши команд, которые требуются для CGEvents. Я не вижулюбой ключи, даже простые (он проходил через мой ввод этого поста, и ничего не было зарегистрировано). ТИА!