У меня есть приложение, которое должно отключить некоторые ключи во время запуска приложения (например: A, опция, команда, смена).как отключить ключи в OS X?
как я могу это сделать?
Используемый язык или метод не имеет значения.
У меня есть приложение, которое должно отключить некоторые ключи во время запуска приложения (например: A, опция, команда, смена).как отключить ключи в OS X?
как я могу это сделать?
Используемый язык или метод не имеет значения.
Вы можете проверять, изменять и блокировать события клавиатуры с помощью 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;
}
Захват и потреблять ключевые события? – Whymarrh