Enlace a teclas multimedia en teclados Apple bajo OSX 10.5 [cerrado]
Pregunta
Soy bastante nuevo en el desarrollo de OSX, por lo que esto puede ser fácil, pero google no ha sido útil.
Estoy intentando vincular una acción a las teclas multimedia que encuentras en los teclados Apple más nuevos (Reproducir, Pausa, etc.). Parece que no puede vincular estas teclas utilizando la API de teclas de acceso rápido normal, pero debe ser posible ya que iTunes claramente lo logra. ¿Hay alguna API no documentada complicada que logre esto? Cualquier ayuda sería muy apreciada.
Solución
Después de buscar en Google más extensamente, este http://www.rogueamoeba.com/ utm / 2007/09/29 / parece abordar el problema. No existe una solución fácil, pero si está desarrollando una aplicación Cocoa real, esto parece posible al menos.
Otros consejos
De mis investigaciones, el sistema operativo está atrapando esos eventos clave antes de que estén disponibles para otros procesos. Creé un CGEventTap, así:
int main(int argc, char *argv[]) {
CFMachPortRef eventTap;
CFRunLoopSourceRef runLoopSource;
eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
if (!eventTap) {
NSLog(@"Couldn't create event tap!");
exit(1);
}
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
CFRunLoopRun();
CFRelease(eventTap);
CFRelease(runLoopSource);
exit(0);
}
Y luego la devolución de llamada del evento real es esta:
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
if (type == kCGEventKeyUp) {
CGKeyCode keycode = CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode);
NSLog(@"%d", keycode);
}
return event;
}
Lo que ve registrado en la consola es que obtiene métodos de registro normales para las teclas de función (si mantiene presionada la tecla " fn " también), pero al presionar las teclas multimedia , brillo, volumen o teclas de expulsión, nada se registra.
Entonces, a partir de esto, desafortunadamente parece que no hay forma de capturar un evento clave de medios. Sin embargo, me encantaría que me demuestren lo contrario.
EDITAR: Olvidé señalar que para que esto funcione, debe ejecutarse como root, o debe activar el acceso para dispositivos de asistencia en " Universal Access " panel de Preferencias del sistema.