2009-12-21 16 views
8

Estoy tratando de generar eventos de teclado keydown y keyup mediante programación. Actualmente estoy usando CGPostKeyboardEvent para hacer esto, pero estoy buscando una forma de hacerlo en un nivel inferior. Miré DDHidLib pero no pude encontrar una manera de crear un evento falso. ¿Alguien puede ayudar?¿Cómo simular una pulsación de tecla de bajo nivel en os x?

actualización: Gracias a los consejos de Weichsel Ahora estoy creando un evento pulsada la tecla con lo siguiente:

CGEventRef e = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)52, true); 
    CGEventPost(kCGSessionEventTap, e); 
    CFRelease(e); 

la que he encontrado here.

Sin embargo,, mi problema sigue en pie, así que elaboraré un poco. La aplicación (tercera parte) que me gustaría enviar pulsaciones de teclas a DDHidLib's implementa la función de captura clave:

- (void) ddhidKeyboard: (DDHidKeyboard *) keyboard 
      keyDown: (unsigned) usageId; 

Y esto nunca se llama utilizando el método actual. Mi suposición es que la tecla simulada con CGEventCreateKeyboardEvent está en un nivel demasiado alto para ser capturado por ddhidKeyboard: keyDown. Entonces, lo que intento hacer es crear el evento de keydown a un nivel suficientemente bajo como para que ddhidKeyboard: keyDown lo reconozca.

Respuesta

6

¿Qué pasa con Quartz Event Services?
Creo que está en el camino correcto, pero debe usar CGEventCreateKeyboardEvent en lugar de CGPostKeyboardEvent porque este último está en desuso desde Mac OS X 10.6.

+0

Gracias! He actualizado la publicación según su sugerencia, pero desafortunadamente no solucionó mi problema. He proporcionado más información sobre el problema. – Lou

+1

Hmmm. ¿reconoce ddhidKeyboard las pulsaciones de tecla globales si la aplicación que lo implementa no es el proceso frontal? –

+0

Lo hace de hecho. – Lou

3
+0

Bueno saberlo. Si tomo esta ruta, ¿eso significaría que cada vez que un cliente ejecutara mi aplicación tendrían que autenticarse? – Lou

+0

No. Puede tener una herramienta de ayuda privilegiada que ejecuta ejecuciones por usted. –

Cuestiones relacionadas