我有一个应用程序需要在应用程序运行时禁用某些键(即:A,选项,命令,移位)。
我该怎么做?
使用的语言或方法并不重要。
答案 0 :(得分: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;
}