objective-c - teclado - problemas con el mouse league of legends
Desactivar mediante programaciĆ³n el mouse y el teclado (1)
Me gustaría desactivar de manera programática el mouse y el teclado temporalmente en un mac (usando Objective C / C / Unix) y luego volver a habilitarlos.
He creado una pequeña aplicación de código abierto que le permite desactivar selectivamente los teclados con la función CGEventTap
de OS X. Está dentro del Carbon Framework, pero está basado en CoreFoundation, por lo que también funciona en Lion. Como ejemplo, puedes probar mi SourceApp MultiLayout abierto , disponible aquí en GitHub .
Básicamente, lo que debes hacer si quieres hacerlo tú mismo es:
Para usarlo, debes agregar Carbon Framework:
#import <Carbon/Carbon.h>
Luego crea un evento como este:
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);
}
Para interrumpir los eventos cuando sea necesario, use este fragmento:
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;
}
Simplemente configure boolean dontForwardTap
en true, y los eventos se detendrán.