如何在OS X中禁用密钥?

时间:2014-02-12 16:51:18

标签: macos keyboard-hook

我有一个应用程序需要在应用程序运行时禁用某些键(即:A,选项,命令,移位)。

我该怎么做?

使用的语言或方法并不重要。

1 个答案:

答案 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;
}