以编程方式禁用鼠标和键盘

Posted

技术标签:

【中文标题】以编程方式禁用鼠标和键盘【英文标题】:Programmatically Disable Mouse & keyboard 【发布时间】:2011-10-10 05:42:54 【问题描述】:

我想在 Mac 上以编程方式暂时禁用鼠标和键盘输入(使用 Objective C/C/Unix),然后重新启用它们。

【问题讨论】:

可能重复:***.com/questions/4518559/… 这里有另一个解决方案:***.com/questions/5785630/… 【参考方案1】:

我制作了一个小型开源应用程序,允许您使用 OS X 中的CGEventTap 函数选择性地禁用键盘。它位于 Carbon 框架内,但基于 CoreFoundation,因此它也适用于 Lion。 举个例子,你可以试试我的开源应用程序MultiLayout, available here on GitHub。

如果你想自己做,基本上你需要做的是:

要使用它,你需要添加Carbon Framework:

#import <Carbon/Carbon.h>

然后像这样创建一个事件点击:

void tap_keyboard(void) 
    CFRunLoopSourceRef runLoopSource;

    CGEventMask mask = kCGEventMaskForAllEvents;
    //CGEventMask mask = CGEventMaskBit(kCGEventKeyUp) | CGEventMaskBit(kCGEventKeyDown);

    CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, mask, myCGEventCallback, NULL);

    if (!eventTap)  
        NSLog(@"Couldn't create event tap!");
        exit(1);
    

    runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);

    CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);

    CGEventTapEnable(eventTap, true);

    CFRelease(eventTap);
    CFRelease(runLoopSource);


要在必要时中断事件,请使用这个 sn-p:

bool dontForwardTap = false;

CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) 


    //NSLog(@"Event Tap: %d", (int) CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode));

    if (dontForwardTap)
        return nil;
    else
        return event;

只需将布尔值 dontForwardTap 设置为 true,事件就会停止。

【讨论】:

以上是关于以编程方式禁用鼠标和键盘的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux下禁用键盘,触摸板,鼠标等输入设备

Linux使用小记:命令行打开/禁用触摸板鼠标

以编程方式获取/设置 Macos 默认系统键盘快捷键

以编程方式显示/隐藏虚拟键盘

Windows下,用python实现禁用硬件,例如禁用键盘/鼠标等

以编程方式模拟鼠标拖动