以编程方式禁用鼠标和键盘
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,事件就会停止。
【讨论】:
以上是关于以编程方式禁用鼠标和键盘的主要内容,如果未能解决你的问题,请参考以下文章