2011-07-11 3 views
2

Je veux obtenir une entrée clavier sur OSX en utilisant C++ sans utiliser Cocoa, des gestionnaires UPP Carbon obsolètes et si possible sans utiliser IOHID car c'est beaucoup de travail supplémentaire. J'ai déjà implémenté une classe de souris simple en utilisant des taps d'événements quartz et cela fonctionne comme un charme et maintenant je voudrais les utiliser pour implémenter une classe de clavier. Quoi qu'il en soit que les états de référence sous CGEventTapCreate: http://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.htmlOSX Carbon: Tapez sur l'événement Quartz pour entrer le clavier

vous ne pouvez accéder aux événements clés si l'une des conditions suivantes est remplie:

  1. Le processus en cours est en cours d'exécution en tant qu'utilisateur racine.
  2. L'accès aux appareils et accessoires fonctionnels est activé. Sous Mac OS X 10.4, vous pouvez activer cette fonctionnalité à l'aide des préférences système, du panneau Universal Access , de la vue Clavier.

c'est une limitation très sérieuse puisque je veux aussi que mon application fonctionne sans réglages bizarres. Y a-t-il un moyen de contourner ce problème? Sinon, existe-t-il une alternative à l'utilisation de Taps dans Carbon? Merci!

Répondre

0

La méthode la plus simple consiste à utiliser la fonction Carbone semi-déconseillée RegisterEventHotKey, voir this SO Q&A, par exemple.

Si non, vous devez vivre avec cette restriction. La restriction est là pour empêcher une mauvaise personne d'installer keylogger dans les coulisses. Vous devez demander à l'utilisateur d'ouvrir les préférences, tapez le mot de passe administrateur, etc.

1

Vous pouvez essayer d'utiliser AXMakeProcessTrusted. Ceci est censé être identique à Accès pour les appareils fonctionnels par processus.

+0

hey, ça a l'air génial, de toute façon c'est un plus gros bémol que son prix. Je suis en train de capturer les événements clés du cacao maintenant (à l'intérieur de la fonction sendEvent de NSApplication) car je n'ai besoin que des événements au niveau de l'application. Merci! – moka

Questions connexes