2009-02-03 13 views
8

Estoy buscando acceso a toda la aplicación para eventos de teclado sin procesar en OS X, ya sea utilizando los marcos Cocoa o Carbon (o cualquiera de las API subyacentes, para el caso). Sé que puedo anular el evento sendEvent de NSApplication: para obtener información sin formato del teclado, pero las claves meta (comando, control, alternativa, shift, etc.) no se muestran como eventos de pulsación de teclas. Estoy buscando algo análogo al marco DirectInput de Microsoft.Acceso directo a eventos de teclado en OSX

Gracias!

Respuesta

10

Creo que el equivalente a DirectInput es HID Manager. HID significa "dispositivo de interfaz humana" y HID Manager (a veces llamado HIDLib) es la API de bajo nivel para HID: teclados, mouse y joysticks.

Leopard tiene una nueva API HID Manager, documentada en Technical Note TN2187. La API pre-Leopard está documentada en HID Class Device Interface Guide. Escribí un contenedor Objecive-C alrededor de las API más antiguas, DDHidLib, que pueden serle útiles. Leopard API es mucho más bonito. Yo usaría eso directamente, si puedes.

+1

Si esto depende de '¿Habilitar el acceso de dispositivo de ayuda'? – Raviprakash

1

Puede usar la función RegisterHotKeyEvent Carbon, aunque no estoy seguro si puede registrarse para cualquiera de las claves meta explícitamente.

La entrada del blog Program Global Hotkeys in Cocoa Easily explica cómo hacerlo.

5

El marco de Core Graphics también tiene algunas funcionalidades útiles enterradas en él como parte del sistema de operación remota. Busque CGRemoteOperation.h y revise Quartz Events reference.

Puede usar el sistema Quartz Events para instalar "toques de evento" específicos de la aplicación o del sistema, que le permiten monitorear e inyectar eventos de teclado y mouse a un nivel bastante bajo. Hace algunos años hubo algunos errores con los grifos de eventos específicos de la aplicación, pero con suerte ya se han resuelto.

Creo que el material HID es principalmente para el desarrollo de controladores, por lo que si solo está buscando una herramienta para su aplicación, HID es probablemente excesivo.

3

NSResponder clases derivadas tienen un método -(void)flagsChanged: se llama cuando se mantienen presionadas las metaclases.

Cuestiones relacionadas