2009-02-03 22 views
8

Sto cercando un accesso a livello di applicazione per eventi di tastiera non elaborati in OS X, utilizzando i framework Cocoa o Carbon (o una delle API sottostanti, se è per questo). So che posso ignorare sendEvent di NSApplication: per ottenere informazioni raw sulla tastiera, ma per i meta key (comando, control, alternate, shift, ecc) non vengono visualizzati come eventi di battitura. Sto cercando qualcosa di analogo al framework DirectInput di Microsoft.Accesso diretto agli eventi della tastiera in OSX

Grazie!

risposta

10

Penso che l'equivalente di DirectInput sia HID Manager. HID sta per "human interface device" e HID Manager (a volte chiamato HIDLib) è l'API di basso livello per HID: tastiere, mouse e joystick.

Leopard ha una nuova API HID Manager, documentata in Technical Note TN2187. L'API pre-Leopard è documentata in HID Class Device Interface Guide. Ho scritto un wrapper Objecive-C attorno alle vecchie API, DDHidLib, che potresti trovare utile. L'API Leopard è molto più bella,. Lo userei direttamente, se puoi.

+1

Se questo dipende da "Abilita accesso dispositivo immediato"? – Raviprakash

1

È possibile utilizzare la funzione RegisterHotKeyEvent Carbon, non sono sicuro che sia possibile registrarsi esplicitamente per le meta chiavi.

Il post del blog Program Global Hotkeys in Cocoa Easily spiega come farlo.

5

Il framework Core Graphics ha anche alcune utili funzionalità sepolte in esso come parte del sistema operativo remoto. Cerca CGRemoteOperation.h e controlla lo Quartz Events reference.

È possibile utilizzare il sistema Quartz Events per installare "eventi" specifici per l'applicazione o per l'intero sistema, che consentono di monitorare e inserire eventi di tastiera e mouse a un livello piuttosto basso. Alcuni anni fa c'erano alcuni bug con i colpetti di eventi specifici per le applicazioni, ma si spera siano stati elaborati ormai.

Penso che il materiale HID sia principalmente per lo sviluppo di driver, quindi se stai cercando uno strumento per la tua applicazione, HID probabilmente è eccessivo.

3

NSResponder classi derivate hanno un metodo -(void)flagsChanged: viene chiamato quando si tengono premuti i meta-tasti.

Problemi correlati