Karte NSEvent Schlüsselcode, um den virtuellen Schlüssel-code
NSEvent keyCode gibt eine Tastatur-scan-code, das ist ein hardware-spezifischen code, repräsentiert den physischen Schlüssel. Ich möchte zum konvertieren der scan-code für ein virtual-key-Codes, die in den logischen Schlüssel auf der Grundlage der Benutzer-Tastatur-layout (QWERTZ, AZERTY, etc.).
In Windows kann ich dies tun über MapVirtualKey. Was ist den OS X äquivalent?
- Für jemanden kommen hier mit einem ähnlichen problem. Haben Sie einen Blick auf KeyNaming library.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den virtuellen Schlüssel-code ist genau nicht auf der Grundlage der Benutzer-Tastatur-layout. Es zeigt an, welche Taste gedrückt wurde, und nicht, was Charakter, der Schlüssel produzieren würde, noch wie Sie es bezeichnet.
Beispielsweise
kVK_ANSI_A
(aus Carbon/HIToolbox/Events.h, Wert0x00
) hat nicht meine die Taste, die produziert die 'Ein' - Zeichen, es bedeutet, dass der Schlüssel ist in der position, dass die 'A' - Taste ist im ANSI-standard-Tastatur. Wenn eine französische Tastatur layout aktiv ist, kann dieser Schlüssel produzieren 'Q'. Wenn die physische Tastatur ist eine französische Tastatur, die Taste wird wohl mit 'Q' zu.So, die virtuellen Schlüssel-code ist eine Art ähnlich einem scan-code, sondern von einer idealisierten, standard-Tastatur. Es ist, wie bereits erwähnt, hardware unabhängig. Es ist auch unabhängig von der Tastatur-layout.
Übersetzen von virtual-key-code zu einem Zeichen, die Sie verwenden können,
UCKeyTranslate()
. Sie müssen die 'uchr' Daten für das aktuelle Tastatur-layout. Sie können, dass mitTISCopyCurrentKeyboardLayoutInputsource()
und dannTISGetInputSourceProperty()
mitkTISPropertyUnicodeKeyLayoutData
als Eigentum Schlüssel.Müssen Sie auch die Tastatur-Typ-code. Ich glaube, es ist immer noch unterstützt, um die Nutzung
LMGetKbdType()
zu bekommen, dass, obwohl es ist nicht mehr dokumentiert, außer in den älteren Abschnitt. Wenn Sie dies nicht möchten, können Sie eineCGEvent
von derNSEvent
,erstellen Sie eineund rufen SieCGEventSource
aus, dass die VerwendungCGEventCreateSourceFromEvent()
, und verwenden Sie dannCGEventSourceGetKeyboardType()
CGEventGetIntegerValueField()
mitkCGKeyboardEventKeyboardType
man die Tastatur geben.Natürlich, es ist viel einfacher zu benutzen Sie einfach
-[NSEvent Zeichen]
oder-[NSEvent charactersIgnoringModifiers]
. Oder, wenn Sie die Implementierung einer text-Ansicht, senden key-down-Ereignisse zu-[NSResponder interpretKeyEvents:]
(wie besprochen, in Kakao-Event Handling Guide: Tastenereignisse Verarbeiten) oder-[NSTextInputContext handleEvent:]
(wie besprochen, in Kakao Text Architecture Guide:Text Bearbeiten). Entweder die rufen zurück, um die Ansicht mit der entsprechenden Aktion Selektor, wiemoveBackward:
oder mit-insertText:
wenn die Tastenkombination (im Kontext der jüngsten Ereignisse und die Eingabe-Quelle) würde die Produktion von text.Entsprechend der NSEvent Dokumentation
-[NSEvent keyCode]
gibt, die hardware-unabhängige virtuelle Taste code.