2009-02-03 6 views
8

Je recherche un accès à l'échelle de l'application aux événements de clavier brut sous OS X, soit en utilisant les frameworks Cocoa ou Carbon (ou n'importe quelle API sous-jacente, d'ailleurs). Je sais que je peux redéfinir sendEvent de NSApplication: pour obtenir des informations de clavier brutes, mais pour les clés de méta (commande, contrôle, alternance, décalage, etc.) n'apparaissent pas comme des événements de frappe. Je cherche quelque chose d'analogue à la structure DirectInput de Microsoft.Accès direct aux événements de clavier sous OSX

Merci!

Répondre

10

Je pense que l'équivalent de DirectInput est HID Manager. HID est l'abréviation de "human interface device" et HID Manager (parfois appelé HIDLib) est l'API de bas niveau pour les HID: claviers, souris et joysticks.

Leopard a une nouvelle API HID Manager, documentée sous Technical Note TN2187. L'API pré-Leopard est documentée au HID Class Device Interface Guide. J'ai écrit un wrapper Objecive-C autour des anciennes API, DDHidLib, que vous pouvez trouver utile. L'API Leopard est beaucoup mieux. Je l'utiliserais directement, si vous le pouvez.

+1

Si cela dépend de 'Activer l'accès au périphérique'? – Raviprakash

1

Vous pouvez utiliser la fonction RegisterHotKeyEvent Carbon, mais je ne suis pas sûr si vous pouvez vous inscrire explicitement pour l'une des clés méta. Le message Program Global Hotkeys in Cocoa Easily explique comment procéder.

5

Le framework Core Graphics dispose également de fonctionnalités utiles qui font partie du système d'exploitation à distance. Recherchez CGRemoteOperation.h et consultez le Quartz Events reference.

Vous pouvez utiliser le système Quartz Events pour installer des «taps d'événement» spécifiques à l'application ou à l'échelle du système, qui vous permettent de surveiller et d'injecter des événements clavier et souris à un niveau très bas. Il y a quelques années, il y avait quelques bugs avec des taps d'événements spécifiques à l'application, mais ils ont heureusement déjà été résolus.

Je pense que le matériel HID est principalement pour le développement de pilotes, donc si vous recherchez simplement un outil pour votre application, HID est probablement exagéré.

3

NSResponder Les classes dérivées ont une méthode -(void)flagsChanged: qui est appelée lorsque les méta-clés sont maintenues enfoncées.