我想以编程方式禁用鼠标&键盘输入临时在mac上(使用Objective C / C / Unix)&然后重新启用它们。
答案 0 :(得分:4)
我创建了一个小型开源应用程序,允许您从OS X中选择性地禁用具有CGEventTap
功能的键盘。它位于Carbon Framework内部,但基于CoreFoundation,因此它也适用于Lion。
例如,您可以尝试我的开源SourceApp 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);
}
要在必要时中断事件,请使用以下代码段:
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,即可停止事件。