5
我想以編程方式禁用鼠標&暫時在mac上使用鍵盤輸入(使用Objective C/C/Unix)&然後重新啓用它們。以編程方式禁用鼠標和鍵盤
我想以編程方式禁用鼠標&暫時在mac上使用鍵盤輸入(使用Objective C/C/Unix)&然後重新啓用它們。以編程方式禁用鼠標和鍵盤
我已經制作了一個小型的開放源碼應用程序,允許您通過OS X的CGEventTap
函數選擇性地禁用鍵盤。它位於Carbon Framework內部,但基於CoreFoundation,因此它也適用於Lion。 作爲一個例子,你可以嘗試我的開放SourceApp MultiLayout, available here on GitHub。
基本上你需要做什麼,如果你想自己做的是:
#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,並且事件將被停止。
可能的重複:http://stackoverflow.com/questions/4518559/consuming-osx-mouse-trackpad-events-with-an-event-tap –
另一個解決方案是在這裏:http://stackoverflow.com/questions/5785630 /修改 - nsevent待送-A-不同的琴鍵比最一說,被壓/ 5785895#5785895 – FeeJai