2014-02-12 3 views
0

У меня есть приложение, которое должно отключить некоторые ключи во время запуска приложения (например: A, опция, команда, смена).как отключить ключи в OS X?

как я могу это сделать?

Используемый язык или метод не имеет значения.

+0

Захват и потреблять ключевые события? – Whymarrh

ответ

1

Вы можете проверять, изменять и блокировать события клавиатуры с помощью CGEventTap.

Пользователю необходимо предоставить свои вспомогательные привилегии при помощи панели безопасности в разделе «Системные настройки» для событий, которые необходимо отключить перед публикацией.

Что-то вроде этого:

- (void)setKeyBlocker { 
    // You should filter this better than kCGEventMaskForAllEvents, depending on your needs. 
    CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, kCGEventMaskForAllEvents, cgEventCallback, NULL); 

    CFRunLoopSourceRef runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0); 
    CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes); 
    CGEventTapEnable(eventTap, true); 

    CFRelease(eventTap); 
    CFRelease(runLoopSource); 
} 

CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef cgEvent, void *refcon) { 
    NSEvent *event = [NSEvent eventWithCGEvent:cgEvent]; 

    if (event.type == kCGEventKeyDown) { 
     if ([event.characters isEqualToString:@"a"]) { 
      // Kill event 
      return NULL; 
     } 
    } 

    return cgEvent; 
}