Direkter Zugriff auf Tastaturereignisse in OSX

8

Ich suche nach einem anwendungsweiten Zugriff auf rohe Tastaturereignisse in OS X, entweder mit den Cocoa- oder Carbon-Frameworks (oder mit den darunterliegenden APIs). Ich weiß, dass ich sendEvent von NSApplication überschreiben kann: Roh-Tastaturinformationen zu erhalten, aber für die Metaschlüssel (Befehl, Steuerung, Alternative, Verschiebung, usw.) werden nicht als Tastenanschlagsereignisse angezeigt. Ich suche nach etwas, das dem Microsoft DirectInput Rahmenwerk analog ist.

Danke!

    
Stephen Deken 03.02.2009, 13:23
quelle

4 Antworten

10

Ich denke, das Äquivalent zu DirectInput ist HID Manager. HID steht für "human interface device" und HID Manager (manchmal HIDLib genannt) ist die Low-Level-API für HIDs: Tastaturen, Mäuse und Joysticks.

Leopard hat eine neue HID Manager API, die in Technischer Hinweis TN2187 dokumentiert ist. Die Pre-Leopard API ist im HID Class Device Interface Guide dokumentiert. Ich habe einen Objecive-C-Wrapper für die älteren APIs DDHidLib geschrieben, die Sie vielleicht nützlich finden. Die Leopard API ist viel netter. Ich würde das direkt benutzen, wenn du kannst.

    
Dave Dribin 03.02.2009, 16:17
quelle
5

Das Core Graphics-Framework enthält auch einige nützliche Funktionen, die als Teil des Remote-Betriebssystems darin enthalten sind. Suchen Sie nach CGRemoteOperation.h, und lesen Sie die Quarz-Ereignisse-Referenz .

Sie können das Quartz Events-System verwenden, um anwendungsspezifische oder systemweite "Ereignis-Taps" zu installieren, mit denen Sie Tastatur- und Mausereignisse auf ziemlich niedrigem Niveau überwachen und injizieren können. Vor ein paar Jahren gab es einige Bugs mit anwendungsspezifischen Event Taps, aber sie wurden hoffentlich schon ausgearbeitet.

Ich denke, das HID-Zeug ist hauptsächlich für die Treiberentwicklung gedacht. Wenn Sie also nur nach einem Tool für Ihre Anwendung suchen, ist HID wahrscheinlich zu viel.

    
Greg 03.02.2009 16:34
quelle
3

NSResponder abgeleitete Klassen haben eine Methode -(void)flagsChanged : Diese wird aufgerufen, wenn Meta-Keys gedrückt gehalten werden.

    
Walter 29.12.2009 11:23
quelle
1

Sie können die RegisterHotKeyEvent Carbon-Funktion verwenden, ich bin mir nicht sicher, ob Sie sich explizit für einen der Metaschlüssel registrieren können.

Der Blogbeitrag Globale Hotkeys in Cocoa leicht programmieren erklärt, wie man das macht.

    
Nick Haddad 03.02.2009 13:39
quelle

Tags und Links