Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在OSX中禁用密钥?_Macos_Keyboard Hook - Fatal编程技术网

Macos 如何在OSX中禁用密钥?

Macos 如何在OSX中禁用密钥?,macos,keyboard-hook,Macos,Keyboard Hook,我有一个应用程序需要在应用程序运行时禁用一些键(即:A、option、command、shift) 我该怎么做 所使用的语言或方法无关紧要。您可以使用命令检查、修改和阻止键盘事件 用户需要通过系统首选项的安全窗格授予您的应用程序辅助权限,以便在发布之前禁用事件 大概是这样的: - (void)setKeyBlocker { // You should filter this better than kCGEventMaskForAllEvents, depending on your n

我有一个应用程序需要在应用程序运行时禁用一些键(即:A、option、command、shift)

我该怎么做


所使用的语言或方法无关紧要。

您可以使用命令检查、修改和阻止键盘事件

用户需要通过系统首选项的安全窗格授予您的应用程序辅助权限,以便在发布之前禁用事件

大概是这样的:

- (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;
}

捕获并使用关键事件?