2009-12-21 8 views
8

J'essaie de générer des événements de clavier et de clavier par programmation. J'utilise actuellement CGPostKeyboardEvent pour le faire, mais je cherche un moyen de le faire à un niveau inférieur. J'ai regardé DDHidLib mais n'ai pas pu trouver un moyen de créer un faux événement. Quelqu'un peut-il aider?Comment simuler une pression de bas niveau sur os x?

mise à jour: Merci aux conseils de Weichsel Je suis en train de créer un événement clé vers le bas ce qui suit:

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

que je trouve here.

Cependant, mon problème subsiste donc je vais élaborer un peu. L'application (3ème partie) que je voudrais envoyer à des frappes de touches utilise la fonction de capture clé DDHidLib's:

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

Et ce ne sera jamais appelé en utilisant la méthode actuelle. Je suppose que la clé simulée avec CGEventCreateKeyboardEvent est trop élevée pour être capturée par ddhidKeyboard: keyDown. Donc ce que j'essaye de faire est de créer l'événement keydown à un niveau suffisamment bas pour qu'il soit reconnu par ddhidKeyboard: keyDown.

Répondre

6

Qu'est-ce qui ne va pas avec Quartz Event Services?
Je pense que vous êtes sur la bonne voie, mais vous devriez utiliser CGEventCreateKeyboardEvent au lieu de CGPostKeyboardEvent parce que ce dernier est obsolète depuis Mac OS X 10.6.

+0

Merci! J'ai mis à jour le message selon votre suggestion, mais cela n'a malheureusement pas résolu mon problème. J'ai fourni plus d'informations sur le problème. – Lou

+1

Hmmm. Est-ce que ddhidKeyboard reconnaît les pressions de touches globales si l'application qui l'implémente n'est pas le processus de premier plan? –

+0

Il le fait en effet. – Lou

3
+0

Bon à savoir. Si je suivais cette route, cela signifierait-il que chaque fois qu'un client exécuterait mon application, il devrait s'authentifier? – Lou

+0

Non. Vous pouvez avoir un outil d'aide privilégié que launchd fonctionne pour vous. –