2009-12-21 18 views
8

Sto provando a generare gli eventi keydown e keyup della tastiera a livello di programmazione. Attualmente sto usando CGPostKeyboardEvent per fare questo, ma sto cercando un modo per farlo a un livello inferiore. Ho dato un'occhiata a DDHidLib ma non sono riuscito a trovare un modo per creare un evento falso. Qualcuno può aiutare?Come simulare un tasto di basso livello su OS X?

aggiornamento: grazie ai consigli di Weichsel ora sto creando un evento premuto il tasto con il seguente:

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

che ho trovato here.

Tuttavia il, il mio problema rimane valido, quindi elaborerò un po '. L'applicazione (3a parte) che vorrei inviare pressioni di tasto per implementa DDHidLib's tasto funzione di cattura:

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

E questo non viene mai chiamato con il metodo corrente. La mia ipotesi è che il tasto giù simulato con CGEventCreateKeyboardEvent sia troppo alto per essere catturato da ddhidKeyboard: keyDown. Quindi, quello che sto cercando di fare è creare l'evento keydown a un livello sufficientemente basso tale da essere riconosciuto da ddhidKeyboard: keyDown.

risposta

6

Cosa c'è che non va con Quartz Event Services?
Penso che tu sia sulla strada giusta, ma dovresti usare CGEventCreateKeyboardEvent invece di CGPostKeyboardEvent perché quest'ultimo è deprecato da Mac OS X 10.6.

+0

Grazie! Ho aggiornato il post in base al tuo suggerimento, ma purtroppo non è stato risolto il problema. Ho fornito alcune ulteriori informazioni sul problema. – Lou

+1

Hmmm. ddhidKeyboard riconosce i tasti di pressione globali se l'app che implementa non è il processo frontale? –

+0

Lo fa davvero. – Lou

3
+0

Buono a sapersi. Se seguissi questa strada, ciò significherebbe che ogni volta che un cliente eseguiva la mia app dovevano autenticarsi? – Lou

+0

No. È possibile avere uno strumento di supporto privilegiato avviato da launchd. –