Freigeben über


Übersicht über Tastatureingaben

Anwendungen sollten Benutzereingaben von der Tastatur sowie von der Maus akzeptieren. Eine Anwendung empfängt Tastatureingaben in Form von Nachrichten, die in ihren Fenstern gepostet wurden.

Tastatureingabemodell

Das System bietet geräteunabhängige Tastaturunterstützung für Anwendungen, indem ein für die aktuelle Tastatur geeigneter Tastaturtreiber installiert wird. Das System bietet sprachunabhängige Tastaturunterstützung mithilfe des sprachspezifischen Tastaturlayouts, das aktuell vom Benutzer oder der Anwendung ausgewählt wird. Der Tastaturgerätetreiber empfängt Scancodes von der Tastatur, die an das Tastaturlayout gesendet werden, in das sie in Nachrichten übersetzt und in die entsprechenden Fenster in Ihrer Anwendung gepostet werden.

Jeder Taste auf einer Tastatur zugewiesen ist ein eindeutiger Wert, der als Scancode bezeichnet wird, ein geräteabhängiger Bezeichner für die Taste auf der Tastatur. Eine Tastatur generiert zwei Scancodes, wenn der Benutzer eine Taste eingibt – eine, wenn der Benutzer die Taste drückt und eine andere, wenn der Benutzer die Taste loslässt.

Der Tastaturgerätetreiber interpretiert einen Scancode und übersetzt ihn in einen virtuellen Tastencode, einen vom System definierten geräteunabhängigen Wert, der den Zweck einer Taste identifiziert. Nach der Übersetzung eines Scancodes erstellt das Tastaturlayout eine Nachricht, die den Scancode, den virtuellen Tastencode und andere Informationen zum Tastenanschlag enthält, und platziert die Nachricht dann in der Systemnachrichtenwarteschlange. Das System entfernt die Nachricht aus der Systemnachrichtenwarteschlange und sendet sie an die Nachrichtenwarteschlange des entsprechenden Threads. Schließlich entfernt die Nachrichtenschleife des Threads die Nachricht und übergibt sie an die entsprechende Fensterprozedur zur Verarbeitung. Die folgende Abbildung zeigt das Tastatureingabemodell.

Tastatureingabeverarbeitungsmodell

Tastaturfokus und Aktivierung

Das System sendet Tastaturnachrichten in die Nachrichtenwarteschlange des Vordergrundthreads, der das Fenster mit dem Tastaturfokus erstellt hat. Der Tastaturfokus ist eine temporäre Eigenschaft eines Fensters. Das System teilt die Tastatur zwischen allen Fenstern auf dem Display, indem der Tastaturfokus in Richtung des Benutzers von einem Fenster in ein anderes verschoben wird. Das Fenster mit dem Tastaturfokus empfängt (aus der Nachrichtenwarteschlange des Threads, der ihn erstellt hat) alle Tastaturnachrichten, bis der Fokus in ein anderes Fenster wechselt.

Ein Thread kann die GetFocus-Funktion aufrufen, um zu bestimmen, welche Fenster (sofern vorhanden) derzeit den Tastaturfokus haben. Ein Thread kann der Tastatur den Fokus auf eines seiner Fenster geben, indem die SetFocus-Funktion aufgerufen wird. Wenn sich der Tastaturfokus von einem Fenster in ein anderes ändert, sendet das System eine WM_KILLFOCUS Nachricht an das Fenster, das den Fokus verloren hat, und sendet dann eine WM_SETFOCUS Nachricht an das Fenster, das den Fokus erlangt hat.

Das Konzept des Tastaturfokus bezieht sich auf das des aktiven Fensters. Das aktive Fenster ist das Fenster der obersten Ebene, mit dem der Benutzer derzeit arbeitet. Das Fenster mit dem Tastaturfokus ist entweder das aktive Fenster oder ein untergeordnetes Fenster des aktiven Fensters. Um dem Benutzer zu helfen, das aktive Fenster zu identifizieren, platziert das System es oben in der Z-Reihenfolge und hebt dessen Titelleiste (sofern vorhanden) und Rahmen hervor.

Der Benutzer kann ein Fenster auf oberster Ebene aktivieren, indem er darauf klickt, es mit der Tastenkombination Alt+Tab oder Alt+Esc auswählt oder es aus der Aufgabenliste auswählt. Ein Thread kann ein Fenster auf oberster Ebene mithilfe der SetActiveWindow-Funktion aktivieren. Mithilfe der GetActiveWindow-Funktion kann ermittelt werden, ob ein erstelltes Fenster auf oberster Ebene aktiv ist.

Wenn ein Fenster deaktiviert und ein anderes aktiviert wird, sendet das System die WM_ACTIVATE Nachricht. Das niedrigwertige Wort des wParam-Parameters ist null, wenn das Fenster deaktiviert wird, und ungleich null, wenn es aktiviert wird. Wenn die Standardfensterprozedur die WM_ACTIVATE Nachricht empfängt, wird der Tastaturfokus auf das aktive Fenster festgelegt.

Um das Erreichen von Anwendungen durch Tastatur- und Mauseingabeereignisse zu blockieren, verwenden Sie "BlockInput". Beachten Sie, dass die BlockInput-Funktion die asynchrone Tastatureingabezustandstabelle nicht beeinträchtigt. Dies bedeutet, dass das Aufrufen der SendInput-Funktion , während die Eingabe blockiert wird, die asynchrone Tastatureingabezustandstabelle ändert.

Tastenanschlagsnachrichten

Durch Drücken einer Taste wird eine WM_KEYDOWN oder WM_SYSKEYDOWN Nachricht in der Threadnachrichtenwarteschlange platziert, die an das Fenster angefügt ist, das den Tastaturfokus hat. Durch das Freigeben eines Schlüssels wird eine WM_KEYUP oder WM_SYSKEYUP Nachricht in der Warteschlange platziert.

Tasten-nach-oben- und Tasten-nach-unten-Meldungen treten typischerweise paarweise auf, aber wenn der Benutzer eine Taste lang genug hält, um die automatische Wiederholungsfunktion der Tastatur zu starten, generiert das System eine Reihe von WM_KEYDOWN oder WM_SYSKEYDOWN Meldungen nacheinander. Anschließend wird eine einzelne WM_KEYUP oder WM_SYSKEYUP Nachricht generiert, wenn der Benutzer den Schlüssel loslässt.

In diesem Abschnitt werden die folgenden Themen behandelt:

System- und Nichtsystemtastenanschläge

Das System unterscheidet zwischen Systemtastenanschlägen und Nichtsystem-Tastenanschlägen. Systemtastenanschläge erzeugen Systemtastenanschlagsnachrichten, WM_SYSKEYDOWN und WM_SYSKEYUP. Nichtsystemtastenanschläge erzeugen Nichtsystemtastennachrichten, WM_KEYDOWN und WM_KEYUP.

Wenn die Fensterprozedur eine Systemtastenanschlagnachricht verarbeiten muss, stellen Sie sicher, dass die Prozedur nach der Verarbeitung der Nachricht an die DefWindowProc-Funktion übergibt. Andernfalls werden alle Systemvorgänge, die die ALT-TASTE einbeziehen, deaktiviert, wenn das Fenster den Tastaturfokus hat. Das heißt, der Benutzer kann nicht auf die Menüs oder das Systemmenü des Fensters zugreifen oder die Tastenkombination ALT+ESC oder ALT+TAB verwenden, um ein anderes Fenster zu aktivieren.

Systemtastenmeldungen dienen in erster Linie der Verwendung durch das System und nicht für eine Anwendung. Das System verwendet sie, um die integrierte Tastaturschnittstelle für Menüs bereitzustellen und dem Benutzer die Steuerung darüber zu ermöglichen, welches Fenster aktiv ist. Systemtastaturmeldungen werden generiert, wenn der Benutzer eine Taste in Kombination mit der ALT-TASTE eingibt oder wenn der Benutzer eingibt und kein Fenster den Tastaturfokus hat (z. B. wenn die aktive Anwendung minimiert wird). In diesem Fall werden die Nachrichten in der Nachrichtenwarteschlange gepostet, die an das aktive Fenster angefügt ist.

Nichtsystem-Tastendruckmeldungen dienen zur Verwendung durch Anwendungsfenster; die DefWindowProc-Funktion verarbeitet sie nicht. Eine Fensterprozedur kann alle nicht benötigten Nichtsystemtastenanschläge verwerfen.

Virtual-Key-Codes, die beschrieben werden

Der wParam-Parameter einer Tastenanschlagnachricht enthält den virtuellen Schlüsselcode der Taste, die gedrückt oder losgelassen wurde. Eine Fensterprozedur verarbeitet oder ignoriert eine Tastatureingabemeldung, abhängig vom Wert des virtuellen Schlüsselcodes.

Eine typische Fensterprozedur verarbeitet nur einen kleinen Teil der Tastendruck-Nachrichten, die sie empfängt, und ignoriert den Rest. Eine Fensterprozedur kann z. B. nur WM_KEYDOWN Tastaturanschläge verarbeiten, und nur solche, die virtuelle Tastencodes für die Cursorbewegungstasten, Umschalttasten (auch als Steuertasten bezeichnet) und Funktionstasten enthalten. Eine typische Fensterprozedur verarbeitet keine Tastaturanschläge von Zeichentasten. Stattdessen wird die TranslateMessage-Funktion verwendet, um die Nachricht in Zeichennachrichten zu konvertieren. Weitere Informationen zu TranslateMessage und Zeichennachrichten finden Sie unter "Zeichennachrichten".

Tastenanschlag-Nachrichtensignale

Der lParam-Parameter einer Tastenanschlagnachricht enthält zusätzliche Informationen über die Tastatureingabe, die die Nachricht generiert hat. Diese Informationen umfassen die Wiederholungsanzahl, den Scancode, das Erweiterte-Taste-Flag, den Kontextcode, das Vorherige-Schlüsselstatus-Flag und das Übergangsstatus-Flag. Die folgende Abbildung zeigt die Speicherorte dieser Flags und Werte im lParam-Parameter .

die Speicherorte der Flags und Werte im lparam-Parameter einer Tastendrucknachricht

Eine Anwendung kann die folgenden Werte verwenden, um die Tastaturanschläge von einem hochgeordneten Wort des lParam abzurufen.

Wert BESCHREIBUNG
KF_EXTENDED
0x0100
Ändert die Kennzeichnung für erweiterte Schlüssel.
KF_DLGMODE
0x0800
Ändert die Dialogmodus-Flag, die angibt, ob ein Dialogfeld aktiv ist.
KF_MENUMODE
0x1000
Ändert die Menümoduskennzeichnung, die angibt, ob ein Menü aktiv ist.
KF_ALTDOWN
0x2000
Manipuliert die Kontextcodekennzeichnung.
KF_REPEAT
0x4000
Ändert das vorherige Zustandskennzeichen.
KF_UP
0x8000
Ändert die Übergangsstatuskennzeichnung.

Beispielcode:

case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
{
    WORD vkCode = LOWORD(wParam);                                 // virtual-key code
    
    WORD keyFlags = HIWORD(lParam);

    WORD scanCode = LOBYTE(keyFlags);                             // scan code
    BOOL isExtendedKey = (keyFlags & KF_EXTENDED) == KF_EXTENDED; // extended-key flag, 1 if scancode has 0xE0 prefix
    
    if (isExtendedKey)
        scanCode = MAKEWORD(scanCode, 0xE0);

    BOOL wasKeyDown = (keyFlags & KF_REPEAT) == KF_REPEAT;        // previous key-state flag, 1 on autorepeat
    WORD repeatCount = LOWORD(lParam);                            // repeat count, > 0 if several keydown messages was combined into one message

    BOOL isKeyReleased = (keyFlags & KF_UP) == KF_UP;             // transition-state flag, 1 on keyup

    // if we want to distinguish these keys:
    switch (vkCode)
    {
    case VK_SHIFT:   // converts to VK_LSHIFT or VK_RSHIFT
    case VK_CONTROL: // converts to VK_LCONTROL or VK_RCONTROL
    case VK_MENU:    // converts to VK_LMENU or VK_RMENU
        vkCode = LOWORD(MapVirtualKeyW(scanCode, MAPVK_VSC_TO_VK_EX));
        break;
    }

    // ...
}
break;

Zahl der Wiederholungen

Sie können die Wiederholungsanzahl überprüfen, um zu bestimmen, ob eine Tastatureingabe mehr als einen Tastenanschlag darstellt. Das System erhöht die Anzahl, wenn die Tastatur WM_KEYDOWN oder WM_SYSKEYDOWN Nachrichten schneller generiert, als eine Anwendung sie verarbeiten kann. Dies tritt häufig auf, wenn der Benutzer eine Taste lang genug hält, um die automatische Wiederholungsfunktion der Tastatur zu starten. Anstatt die Systemnachrichtenwarteschlange mit den resultierenden Tastennachrichten zu füllen, kombiniert das System die Nachrichten zu einer einzigen Tastendrucknachricht und erhöht den Wiederholungszähler. Wenn Sie einen Schlüssel freigeben, kann das Feature für automatische Wiederholungen nicht gestartet werden, sodass die Wiederholungsanzahl für WM_KEYUP und WM_SYSKEYUP Nachrichten immer auf 1 festgelegt ist.

Scancodes

Diagramm einer Typ 4-Tastatur mit den Tastenpositionen für jede Taste.

Der Scancode ist der Wert, den das System generiert, wenn der Benutzer eine Taste drückt. Es handelt sich um einen Wert, der die Taste unabhängig vom aktiven Tastaturlayout identifiziert, im Gegensatz zu dem Zeichen, das durch die Taste dargestellt wird. Eine Anwendung ignoriert in der Regel Scancodes. Stattdessen werden die Virtuellen Schlüsselcodes verwendet, um Tastaturanschläge zu interpretieren.

Moderne Tastaturen verwenden die HID-Spezifikation (Human Interface Devices), um mit einem Computer zu kommunizieren. Der Tastaturtreiber konvertiert gemeldete HID-Verwendungswerte, die von der Tastatur gesendet werden, in Scancodes und übergibt sie an Anwendungen.

Hinweis

Während virtuelle Tastencodes in der Regel nützlicher für Desktopanwendungen sind, sind Scancodes möglicherweise in bestimmten Fällen erforderlich, wenn Sie wissen müssen, welche Taste unabhängig vom aktuellen Tastaturlayout gedrückt wird. Beispielsweise sind die WASD (W ist nach oben, A ist nach links, S ist unten und D ist rechts) Tastenbindungen für Spiele, die eine konsistente Tastenanordnung auf US-QWERTY- oder französische AZERTY-Tastaturlayout sicherstellt.

In der folgenden Tabelle sind die Scancodes aufgeführt, die derzeit von Windows erkannt werden. HID-Verwendungsseite/HID-Verwendungs-ID/DIE HID-Verwendungsnamenwerte verweisen auf das DOKUMENT "HID-Verwendungstabellen ". Die Werte für die Tastenposition verweisen auf das vorherige Tastaturbild.

Der Scan 1 Make-Code wird in WM_KEYDOWN/WM_KEYUP/WM_SYSKEYDOWN/WM_SYSKEYUP und WM_INPUT als Nachrichten gesendet.

HID-Verwendungsseitenname HID-Verwendungsname HID-Verwendungsseite HID-Verwendungs-ID Scanvorgang 1 Erstellen Schlüsselposition
Generischer Desktop System herunterfahren 0x0001 0x0081 0xE05E
Generischer Desktop Systemschlaf 0x0001 0x0082 0xE05F
Generischer Desktop Systemaufweckung 0x0001 0x0083 0xE063
Tastatur/Tastenfeld ErrorRollOver 0x0007 0x0001 0x00FF
Tastatur/Tastenfeld Tastatur A 0x0007 0x0004 0x001E 31
Tastatur/Tastenfeld Tastatur B 0x0007 0x0005 0x0030 50
Tastatur/Tastenfeld Tastatur C 0x0007 0x0006 0x002E 48
Tastatur/Tastenfeld Tastatur D 0x0007 0x0007 0x0020 33
Tastatur/Wähltastatur Tastatur E 0x0007 0x0008 0x0012 19
Tastatur/Tastenfeld Tastatur F 0x0007 0x0009 0x0021 34
Tastatur/Tastenfeld Tastatur G 0x0007 0x000A 0x0022 35
Tastatur/Tastenfeld Tastatur H 0x0007 0x000B 0x0023 36
Tastatur/Tastenfeld Tastatur I 0x0007 0x000C 0x0017 24
Tastatur/Tastenfeld Tastatur J 0x0007 0x000D 0x0024 37
Tastatur/Wähltastatur Tastatur K 0x0007 0x000E 0x0025 38
Tastatur/Tastenfeld Tastatur L 0x0007 0x000F 0x0026 39
Tastatur/Ziffernblock Tastatur M 0x0007 0x0010 0x0032 52
Tastatur/Tastenfeld Tastatur N 0x0007 0x0011 0x0031 51
Tastatur/Tastenfeld Tastatur O 0x0007 0x0012 0x0018 25
Tastatur/Tastenfeld Tastatur P 0x0007 0x0013 0x0019 26
Tastatur/Tastenfeld Tastatur Q 0x0007 0x0014 0x0010 17
Tastatur/Tastenfeld Tastatur R 0x0007 0x0015 0x0013 20
Tastatur/Tastenfeld Tastatur S 0x0007 0x0016 0x001F 32
Tastatur/Tastenfeld Tastatur T 0x0007 0x0017 0x0014 21
Tastatur/Tastenfeld Tastatur U 0x0007 0x0018 0x0016 23
Tastatur/Tastenfeld Tastatur V 0x0007 0x0019 0x002F 49
Tastatur/Tastenfeld Tastatur W 0x0007 0x001A 0x0011 18
Tastatur/Tastenfeld Tastatur X 0x0007 0x001B 0x002D 47
Tastatur/Tastenfeld Tastatur Y 0x0007 0x001C 0x0015 22
Tastatur/Tastenfeld Tastatur Z 0x0007 0x001D 0x002C 46
Tastatur/Tastenfeld Tastatur 1 und Bang 0x0007 0x001E 0x0002 2
Tastatur/Tastenfeld Tastatur 2 und At 0x0007 0x001F 0x0003 3
Tastatur/Tastenfeld Tastatur 3 und Hash 0x0007 0x0020 0x0004 4
Tastatur/Tastenfeld Tastatur 4 und Dollar 0x0007 0x0021 0x0005 5
Tastatur/Tastenfeld Tastatur 5 und Prozent 0x0007 0x0022 0x0006 6
Tastatur/Tastenfeld Tastatur 6 und Caret 0x0007 0x0023 0x0007 7
Tastatur/Tastenfeld Tastatur 7 und Und-Zeichen 0x0007 0x0024 0x0008 8
Tastatur/Tastenfeld Tastatur 8 und Stern 0x0007 0x0025 0x0009 9
Tastatur/Tastenfeld Tastatur 9 und linke Klammer 0x0007 0x0026 0x000A 10
Tastatur/Tastenfeld Tastatur 0 und rechte Klammer 0x0007 0x0027 0x000B 11
Tastatur/Tastenfeld Return- und Eingabetaste 0x0007 0x0028 0x001C 43
Tastatur/Tastenfeld Tastatur Escape-Taste 0x0007 0x0029 0x0001 110
Tastatur/Tastenfeld Tastatur löschen 0x0007 0x002A 0x000E 15
Tastatur/Tastenfeld Registerkarte "Tastatur" 0x0007 0x002B 0x000F 16
Tastatur/Tastenfeld Tastatur-Leertaste 0x0007 0x002C 0x0039 61
Tastatur/Tastenfeld Tastaturstrich und Unterstrich 0x0007 0x002D 0x000C 12
Tastatur/Tastenfeld Tastatur Gleicheitszeichen und Pluszeichen 0x0007 0x002E 0x000D 13
Tastatur/Tastenfeld Linke Klammer der Tastatur 0x0007 0x002F 0x001A 27
Tastatur/Tastenfeld Rechte Klammer der Tastatur 0x0007 0x0030 0x001B 28
Tastatur/Tastenfeld Umgekehrter Schrägstrich und Pfeife 0x0007 0x0031 0x002B 29
Tastatur/Tastenfeld Nicht-US-Tastatur mit Hash und Tilde 0x0007 0x0032 0x002B 42
Tastatur/Tastenfeld Tastatur Semikolon und Doppelpunkt 0x0007 0x0033 0x0027 40
Tastatur/Tastenfeld Tastatur-Apostroph und Doppeltes Anführungszeichen 0x0007 0x0034 0x0028 41
Tastatur/Tastenfeld Tastaturgrabakzent und Tilde 0x0007 0x0035 0x0029 1
Tastatur/Tastenfeld Tastaturkomma und LessThan 0x0007 0x0036 0x0033 53
Tastatur/Tastenfeld Tastaturperiode und GreaterThan 0x0007 0x0037 0x0034 54
Tastatur/Tastenfeld Tastatur Schrägstrich und Fragezeichen 0x0007 0x0038 0x0035 55
Tastatur/Tastenfeld Tastatur-Feststelltaste 0x0007 0x0039 0x003A 30
Tastatur/Tastenfeld Tastatur F1 0x0007 0x003A 0x003B 112
Tastatur/Tastenfeld Tastatur F2 0x0007 0x003B 0x003C 113
Tastatur/Tastenfeld Tastatur F3 0x0007 0x003C 0x003D 114
Tastatur/Tastenfeld Tastatur F4 0x0007 0x003D 0x003E 115
Tastatur/Tastenfeld Tastatur F5 0x0007 0x003E 0x003F 116
Tastatur/Tastenfeld Tastatur F6 0x0007 0x003F 0x0040 117
Tastatur/Tastenfeld Tastatur F7 0x0007 0x0040 0x0041 118
Tastatur/Tastenfeld Tastatur F8 0x0007 0x0041 0x0042 119
Tastatur/Tastenfeld Tastatur F9 0x0007 0x0042 0x0043 120
Tastatur/Tastenfeld Tastatur F10 0x0007 0x0043 0x0044 121
Tastatur/Tastenfeld Tastatur F11 0x0007 0x0044 0x0057 122
Tastatur/Tastenfeld Tastatur F12 0x0007 0x0045 0x0058 123
Tastatur/Tastenfeld Tastaturdruckbildschirm 0x0007 0x0046 0xE037
0x0054 *Hinweis 1
124
Tastatur/Tastenfeld Tastatur-Bildlaufsperre 0x0007 0x0047 0x0046 125
Tastatur/Tastenfeld Tastatur anhalten 0x0007 0x0048 0xE11D45
0xE046 *Hinweis 2
0x0045 *Hinweis 3
126
Tastatur/Tastenfeld Tastatur einfügen 0x0007 0x0049 0xE052 75
Tastatur/Tastenfeld Tastatur Startseite 0x0007 0x004A 0xE047 80
Tastatur/Tastenfeld Tastaturseiteup 0x0007 0x004B 0xE049 85
Tastatur/Tastenfeld Tastatur Vorwärts Löschen 0x0007 0x004C 0xE053 76
Tastatur/Tastenfeld Ende-Taste 0x0007 0x004D 0xE04F 81
Tastatur/Tastenfeld PageDown-Tastatur 0x0007 0x004E 0xE051 86
Tastatur/Tastenfeld Tastatur Pfeil nach rechts 0x0007 0x004F 0xE04D 89
Tastatur/Tastenfeld Tastatur Links-Pfeil 0x0007 0x0050 0xE04B 79
Tastatur/Tastenfeld Tastatur-Abwärtspfeil 0x0007 0x0051 0xE050 84
Tastatur/Tastenfeld Tastatur-Pfeil oben 0x0007 0x0052 0xE048 83
Tastatur/Tastenfeld Num-Taste und Löschen 0x0007 0x0053 0x0045
0xE045 *Hinweis 3
90
Tastatur/Tastenfeld Wähltastatur Schrägstrich 0x0007 0x0054 0xE035 95
Tastatur/Tastenfeld Sterntaste 0x0007 0x0055 0x0037 100
Tastatur/Tastenfeld Tastatur-Bindestrich 0x0007 0x0056 0x004A 105
Tastatur/Tastenfeld Wähltastatur Plus 0x0007 0x0057 0x004E 106
Tastatur/Tastenfeld Tastatureingabe 0x0007 0x0058 0xE01C 108
Tastatur/Tastenfeld Wähltastatur 1 und Ende 0x0007 0x0059 0x004F 93
Tastatur/Tastenfeld Ziffernblock 2 und Pfeiltaste nach unten 0x0007 0x005A 0x0050 98
Tastatur/Tastenfeld Tastatur 3 und PageDn 0x0007 0x005B 0x0051 103
Tastatur/Tastenfeld Num-Taste 4 und Pfeil nach links 0x0007 0x005C 0x004B 92
Tastatur/Tastenfeld Tastaturfeld 5 0x0007 0x005D 0x004C 97
Tastatur/Tastenfeld Ziffernblock 6 und Rechtspfeil 0x0007 0x005E 0x004D 102
Tastatur/Tastenfeld Ziffernblock 7 und Home-Taste 0x0007 0x005F 0x0047 91
Tastatur/Tastenfeld Ziffernblock 8 und Pfeil nach oben 0x0007 0x0060 0x0048 96
Tastatur/Tastenfeld Wähltastatur 9 und PageUp 0x0007 0x0061 0x0049 101
Tastatur/Tastenfeld Tastatur 0 und Einfügen 0x0007 0x0062 0x0052 99
Tastatur/Tastenfeld Wähltastaturperiode und Löschen 0x0007 0x0063 0x0053 104
Tastatur/Tastenfeld Tastatur ohne nicht-US-Backslash und Pfeife 0x0007 0x0064 0x0056 45
Tastatur/Tastenfeld Tastaturanwendung 0x0007 0x0065 0xE05D 129
Tastatur/Tastenfeld Tastaturleistung 0x0007 0x0066 0xE05E
Tastatur/Tastenfeld Wähltastatur gleich 0x0007 0x0067 0x0059
Tastatur/Tastenfeld Tastatur F13 0x0007 0x0068 0x0064
Tastatur/Tastenfeld Tastatur F14 0x0007 0x0069 0x0065
Tastatur/Tastenfeld Tastatur F15 0x0007 0x006A 0x0066
Tastatur/Tastenfeld Tastatur F16 0x0007 0x006B 0x0067
Tastatur/Tastenfeld Tastatur F17 0x0007 0x006C 0x0068
Tastatur/Tastenfeld Tastatur F18 0x0007 0x006D 0x0069
Tastatur/Tastenfeld Tastatur F19 0x0007 0x006E 0x006A
Tastatur/Tastenfeld Tastatur F20 0x0007 0x006F 0x006B
Tastatur/Tastenfeld Tastatur F21 0x0007 0x0070 0x006C
Tastatur/Tastenfeld Tastatur F22 0x0007 0x0071 0x006D
Tastatur/Tastenfeld Tastatur F23 0x0007 0x0072 0x006E
Tastatur/Tastenfeld Tastatur F24 0x0007 0x0073 0x0076
Tastatur/Tastenfeld Wähltastatur-Komma 0x0007 0x0085 0x007E 107 *Hinweis 4
Tastatur/Tastenfeld Tastatur International1 0x0007 0x0087 0x0073 56 *Hinweis 4, 5
Tastatur/Tastenfeld Tastatur International2 0x0007 0x0088 0x0070 133 *Hinweis 5
Tastatur/Tastenfeld Tastatur International3 0x0007 0x0089 0x007D 14 *Hinweis 5
Tastatur/Tastenfeld Tastatur International4 0x0007 0x008A 0x0079 132 *Hinweis 5
Tastatur/Tastenfeld Tastatur International5 0x0007 0x008B 0x007B 131 *Hinweis 5
Tastatur/Tastenfeld Tastatur International6 0x0007 0x008C 0x005C
Tastatur/Tastenfeld Tastatur LANG1 0x0007 0x0090 0x0072 *Hinweis 6
0x00F2 *Hinweis 3, 6
Tastatur/Tastenfeld Tastatur LANG2 0x0007 0x0091 0x0071 *Hinweis 6
0x00F1 *Hinweis 3, 6
Tastatur/Tastenfeld Tastatur LANG3 0x0007 0x0092 0x0078
Tastatur/Tastenfeld Tastatur LANG4 0x0007 0x0093 0x0077
Tastatur/Tastenfeld Tastatur LANG5 0x0007 0x0094 0x0076
Tastatur/Tastenfeld Tastatur LinksSteuerung 0x0007 0x00E0 0x001D 58
Tastatur/Tastenfeld Tastatur LeftShift 0x0007 0x00E1 0x002A 44
Tastatur/Tastenfeld LeftAlt-Tastatur 0x0007 0x00E2 0x0038 60
Tastatur/Tastenfeld Linke TASTATUR-GUI 0x0007 0x00E3 0xE05B 127
Tastatur/Tastenfeld Keyboard Rechtssteuerung 0x0007 0x00E4 0xE01D 64
Tastatur/Tastenfeld Tastatur rechtsverschiebig 0x0007 0x00E5 0x0036 57
Tastatur/Tastenfeld Rechte Alt-Taste der Tastatur 0x0007 0x00E6 0xE038 62
Tastatur/Tastenfeld Rechter Pfeil Tastatursteuerung 0x0007 0x00E7 0xE05C 128
Verbraucher Nächsten Titel auswählen 0x000C 0x00B5 0xE019
Verbraucher Vorheriger Titel scannen 0x000C 0x00B6 0xE010
Verbraucher Stopp! 0x000C 0x00B7 0xE024
Verbraucher Wiedergabe/Pause 0x000C 0x00CD 0xE022
Verbraucher Lautlos 0x000C 0x00E2 0xE020
Verbraucher Volumenerhöhung 0x000C 0x00E9 0xE030
Verbraucher Lautstärkeverringerung 0x000C 0x00EA 0xE02E
Verbraucher AL-Verbrauchersteuerungskonfiguration 0x000C 0x0183 0xE06D
Verbraucher AL E-Mail Reader 0x000C 0x018A 0xE06C
Verbraucher AL-Rechner 0x000C 0x0192 0xE021
Verbraucher AL Local Machine Browser 0x000C 0x0194 0xE06B
Verbraucher AC-Suche 0x000C 0x0221 0xE065
Verbraucher AC Haus 0x000C 0x0223 0xE032
Verbraucher AC Zurück 0x000C 0x0224 0xE06A
Verbraucher AC-Vorwärts 0x000C 0x0225 0xE069
Verbraucher AC-Abschaltung 0x000C 0x0226 0xE068
Verbraucher AC-Aktualisierung 0x000C 0x0227 0xE067
Verbraucher AC-Lesezeichen 0x000C 0x022A 0xE066

Hinweise:

  1. SysRq-Tastenscancode wird auf alt+Print-Tastenanschlägen ausgegeben.
  2. Break-Tastencode wird bei Betätigung von STRG+Pause ausgegeben.
  3. Wie in älteren Tastaturnachrichten zu sehen
  4. Die Taste ist auf brasilianischen Tastaturen vorhanden.
  5. Die Taste ist auf japanischen Tastaturen vorhanden.
  6. Der Scancode wird nur im Key Release-Ereignis ausgegeben.

Extended-Key Kennzeichnung

Das Kennzeichen für die erweiterte Taste gibt an, ob die Tastenmeldung von einer der zusätzlichen Tasten auf der erweiterten 101/102-Tastatur kommt. Die erweiterten Tasten bestehen aus der Alt- und Strg-Taste auf der rechten Seite der Tastatur; den Tasten Einfügen*, Löschen*, Home, Ende, Bild nach oben, Bild nach unten und Pfeil in den Clustern links neben dem Nummernblock; der Num-Lock-Taste; der Unterbrechen (Strg+Pause)-Taste; der Druck-Taste; und der Divide (/) und Enter-Taste auf dem Nummernblock. Die rechte UMSCHALTTASTE wird nicht als erweiterte Taste betrachtet, sondern verfügt über einen separaten Scancode.

Wenn angegeben, besteht der Scancode aus einer Sequenz von zwei Byte, wobei das erste Byte einen Wert von 0xE0 hat.

Kontextcode

Der Kontextcode gibt an, ob die Alt-Taste gedrückt war, als die Tastendruckmeldung generiert wurde. Der Code ist 1, wenn die Alt-Taste gedrückt war und 0, wenn sie nicht gedrückt war.

Vorherige Key-State Flagge

Das vorherige Schlüsselstatus-Flag gibt an, ob die Taste, die die Tastatureingabenachricht generiert hat, zuvor gedrückt oder nicht gedrückt war. Es ist 1, wenn die Taste zuvor gedrückt war, und 0, wenn die Taste zuvor losgelassen war. Sie können dieses Kennzeichen verwenden, um Tastaturanschläge zu identifizieren, die von der automatischen Wiederholungsfunktion der Tastatur generiert werden. Dieses Kennzeichen ist für WM_KEYDOWN und WM_SYSKEYDOWN Tastaturanschläge, die von der automatischen Wiederholungsfunktion generiert werden, auf 1 festgelegt. Sie ist für WM_KEYUP und WM_SYSKEYUP Nachrichten immer auf 1 festgelegt.

Transition-State Kennzeichnung

Das Flag "Übergangsstatus" gibt an, ob durch das Drücken oder Loslassen einer Taste die Tastendrucknachricht generiert wurde. Dieses Kennzeichen ist für WM_KEYDOWN und WM_SYSKEYDOWN Nachrichten immer auf 0 festgelegt. sie ist für WM_KEYUP und WM_SYSKEYUP Nachrichten immer auf 1 festgelegt.

Zeichennachrichten

Tastaturanschläge bieten viele Informationen zu Tastaturanschlägen, aber sie stellen keine Zeichencodes für Zeichentastenanschläge bereit. Um Zeichencodes abzurufen, muss eine Anwendung die TranslateMessage-Funktion in der Threadnachrichtenschleife enthalten. TranslateMessage übergibt eine WM_KEYDOWN oder WM_SYSKEYDOWN Nachricht an das Tastaturlayout. Das Layout untersucht den virtuellen Tastenbefehlscode der Nachricht und stellt, wenn dieser einem Tastencode entspricht, den entsprechenden Zeichencode bereit (unter Berücksichtigung des Zustands der UMSCHALT und FESTSTELLTASTE). Anschließend wird eine Zeichennachricht generiert, die den Zeichencode enthält und die Nachricht oben in der Nachrichtenwarteschlange platziert. Die nächste Iteration der Nachrichtenschleife entfernt die Zeichennachricht aus der Warteschlange und verteilt die Nachricht an die entsprechende Fensterprozedur.

In diesem Abschnitt werden die folgenden Themen behandelt:

Nichtsystemzeichennachrichten

Eine Fensterprozedur kann die folgenden Zeichenmeldungen empfangen: WM_CHAR, WM_DEADCHAR, WM_SYSCHAR, WM_SYSDEADCHAR und WM_UNICHAR. Die TranslateMessage-Funktion generiert eine WM_CHAR oder WM_DEADCHAR Nachricht, wenn sie eine WM_KEYDOWN Nachricht verarbeitet. Ebenso generiert sie eine WM_SYSCHAR oder WM_SYSDEADCHAR Nachricht, wenn sie eine WM_SYSKEYDOWN Nachricht verarbeitet.

Eine Anwendung, die Tastatureingaben verarbeitet, ignoriert in der Regel alle Nachrichten außer WM_CHAR und WM_UNICHAR und übergibt alle anderen an die DefWindowProc-Funktion. Beachten Sie, dass WM_CHAR UTF-16 (16-Bit-Unicode-Transformationsformat) oder ANSI-Zeichensatz verwendet, während WM_UNICHAR immer UTF-32 (32-Bit-Unicode-Transformationsformat) verwendet. Das System verwendet die WM_SYSCHAR und WM_SYSDEADCHAR Messages, um Menümemonics zu implementieren.

Der wParam-Parameter aller Zeichennachrichten enthält den Zeichencode der gedrückten Zeichentaste. Der Wert des Zeichencodes hängt von der Fensterklasse des Fensters ab, das die Nachricht empfängt. Wenn die Unicode-Version der RegisterClass-Funktion zum Registrieren der Fensterklasse verwendet wurde, stellt das System Unicode-Zeichen für alle Fenster dieser Klasse bereit. Andernfalls stellt das System ANSI-Zeichencodes bereit. Weitere Informationen finden Sie unter Registrieren von Fensterklassen und Verwenden von UTF-8-Codeseiten in Windows-Apps.

Der Inhalt des lParam-Parameters einer Zeichennachricht ist identisch mit dem Inhalt des lParam-Parameters der key-down-Nachricht, die übersetzt wurde, um die Zeichennachricht zu erzeugen. Informationen finden Sie unter Keystroke Message Flags.

Dead-Character Nachrichten

Einige nicht englische Tastaturen enthalten Zeichentasten, die nicht von sich aus Zeichen erzeugen sollen. Stattdessen werden sie verwendet, um dem Zeichen, das durch den nachfolgenden Tastenanschlag erzeugt wird, ein diakritisches Zeichen hinzuzufügen. Diese Schlüssel werden als inaktive Schlüssel bezeichnet. Die Zirkumflextaste auf einer deutschen Tastatur ist ein Beispiel für eine tote Taste. Um das Zeichen einzugeben, das aus einem "o" mit einer Zirkumflex besteht, würde ein deutscher Benutzer den Zirkumflexschlüssel gefolgt von der "o"-Taste eingeben. Das Fenster mit dem Tastaturfokus würde die folgende Abfolge von Nachrichten erhalten:

  1. WM_KEYDOWN
  2. WM_DEADCHAR
  3. WM_KEYUP
  4. WM_KEYDOWN
  5. WM_CHAR
  6. WM_KEYUP

TranslateMessage generiert die WM_DEADCHAR Nachricht, wenn sie die WM_KEYDOWN Nachricht aus einem inaktiven Schlüssel verarbeitet. Obwohl der wParam-Parameter der WM_DEADCHAR-Nachricht den Zeichencode des diakritischen Zeichens für die Tot-Taste enthält, ignoriert eine Anwendung die Nachricht normalerweise. Stattdessen verarbeitet sie die WM_CHAR Nachricht, die von der nachfolgenden Tastatureingabe generiert wird. Der wParam-Parameter der WM_CHAR Nachricht enthält den Zeichencode des Buchstabens mit dem diakritischen Zeichen. Wenn der nachfolgende Tastenanschlag ein Zeichen generiert, das nicht mit einem diakritischen Zeichen kombiniert werden kann, generiert das System zwei WM_CHAR Nachrichten. Der wParam-Parameter des ersten enthält den Zeichencode des diakritischen; der wParam-Parameter der zweiten enthält den Zeichencode des nachfolgenden Zeichenschlüssels.

Die TranslateMessage-Funktion generiert die WM_SYSDEADCHAR Nachricht, wenn sie die WM_SYSKEYDOWN Nachricht von einer inaktiven Systemtaste verarbeitet (eine tote Taste, die in Kombination mit der ALT-TASTE gedrückt wird). Eine Anwendung ignoriert in der Regel die WM_SYSDEADCHAR Nachricht.

Wichtiger Status

Während der Verarbeitung einer Tastaturnachricht muss eine Anwendung möglicherweise den Status einer anderen Taste neben dem Schlüssel bestimmen, der die aktuelle Nachricht generiert hat. Beispielsweise muss eine Textverarbeitungsanwendung, die es dem Benutzer ermöglicht, UMSCHALT+ENDE zu drücken, um einen Textblock auszuwählen, den Status der UMSCHALTTASTE überprüfen, wenn sie eine Tastatureingabenachricht von der Ende-Taste empfängt. Die Anwendung kann die GetKeyState-Funktion verwenden, um den Status eines virtuellen Schlüssels zu dem Zeitpunkt zu bestimmen, zu dem die aktuelle Nachricht generiert wurde. sie kann die GetAsyncKeyState-Funktion verwenden, um den aktuellen Status eines virtuellen Schlüssels abzurufen.

Einige Tasten gelten als Umschalttasten, die den Zustand des Tastaturlayouts ändern. Umschalttasten enthalten in der Regel Feststelltaste (VK_CAPITAL), Num Lock (VK_NUMLOCK) und Scroll-Lock (VK_SCROLL). Die meisten Tastaturen verfügen über entsprechende LED-Indikatoren für diese Tasten.

Das Tastaturlayout verwaltet eine Liste von Namen. Der Name eines Schlüssels, der ein einzelnes Zeichen erzeugt, entspricht dem Zeichen, das vom Schlüssel erzeugt wird. Der Name eines nicht zeichenfolgenfreien Schlüssels, z. B. TAB und EINGABETASTE , wird als Zeichenfolge gespeichert. Eine Anwendung kann den Namen einer beliebigen Taste aus dem Tastaturlayout abrufen, indem sie die GetKeyNameText-Funktion aufruft.

Tastatureingaben und Zeichenübersetzungen

Das System enthält mehrere spezielle Zweckfunktionen, mit denen Scancodes, Zeichencodes und virtuelle Tastencodes übersetzt werden, die durch verschiedene Tastenanschläge generiert werden. Zu diesen Funktionen gehören MapVirtualKey, ToAscii, ToUnicode und VkKeyScan.

Darüber hinaus unterstützt Microsoft Rich Edit 3.0 den HexToUnicode IME, mit dem ein Benutzer mithilfe von Hot Keys zwischen Hexadezimal- und Unicode-Zeichen konvertieren kann. Dies bedeutet, dass die Anwendung, wenn Microsoft Rich Edit 3.0 in eine Anwendung integriert wird, die Features der HexToUnicode IME erbt.

Hot-Key Support

Eine Hotkey ist eine Tastenkombination, die eine WM_HOTKEY-Nachricht generiert, eine Nachricht, die das System an den Anfang der Nachrichtenwarteschlange eines Threads platziert, indem es vorhandene Nachrichten in der Warteschlange umgeht. Anwendungen verwenden Abkürzungstasten, um Tastatureingaben mit hoher Priorität vom Benutzer abzurufen. Wenn Sie z. B. eine Abkürzungstaste definieren, die aus dem Tastenanschlag STRG+C besteht, kann eine Anwendung dem Benutzer das Abbrechen eines langwierigen Vorgangs ermöglichen.

Zum Definieren einer Hot Key ruft eine Anwendung die RegisterHotKey-Funktion auf, wobei die Kombination von Schlüsseln angegeben wird, die die WM_HOTKEY Nachricht generiert, das Handle für das Fenster, um die Nachricht zu empfangen, und den Bezeichner der Abkürzungstaste. Wenn der Benutzer die Abkürzungstaste drückt, wird eine WM_HOTKEY Nachricht in der Nachrichtenwarteschlange des Threads platziert, in dem das Fenster erstellt wurde. Der wParam-Parameter der Nachricht enthält den Bezeichner des Hot Keys. Die Anwendung kann mehrere Hot Keys für einen Thread definieren, aber jeder Hot key im Thread muss über einen eindeutigen Bezeichner verfügen. Bevor die Anwendung beendet wird, sollte sie die Funktion "UnregisterHotKey " verwenden, um die Hot-Taste zu zerstören.

Anwendungen können ein Tastenkürzel-Steuerelement verwenden, um dem Benutzer die Auswahl einer Tastenkombination zu erleichtern. Hotkey-Steuerelemente werden typischerweise verwendet, um eine Hotkey-Taste zu definieren, die ein Fenster aktiviert. Diese verwenden die Funktionen RegisterHotKey und UnregisterHotKey nicht. Stattdessen sendet eine Anwendung, die ein Hot Key-Steuerelement verwendet, normalerweise die WM_SETHOTKEY Nachricht, um die Abkürzungstaste festzulegen. Wenn der Benutzer die Abkürzungstaste drückt, sendet das System eine WM_SYSCOMMAND Nachricht, die SC_HOTKEY angibt. Weitere Informationen zu Hot Key-Steuerelementen finden Sie unter "Verwenden von Hot Key-Steuerelementen" in Den Hot Key-Steuerelementen.

Tastaturtasten für das Browsen und andere Funktionen

Windows bietet Unterstützung für Tastaturen mit speziellen Tasten für Browserfunktionen, Medienfunktionen, Anwendungsstart und Energieverwaltung. Die WM_APPCOMMAND unterstützt die zusätzlichen Tastaturtasten. Darüber hinaus wird die ShellProc-Funktion geändert, um die zusätzlichen Tastaturtasten zu unterstützen.

Es ist unwahrscheinlich, dass ein untergeordnetes Fenster in einer Komponentenanwendung Befehle für diese zusätzlichen Tastaturtasten direkt implementieren kann. Wenn eine dieser Tasten gedrückt wird, sendet DefWindowProc also eine WM_APPCOMMAND Nachricht an ein Fenster. DefWindowProc wird die WM_APPCOMMAND-Nachricht auch an das übergeordnete Fenster weiterleiten. Dies ähnelt der Art und Weise, wie Kontextmenüs mit der rechten Maustaste aufgerufen werden, d. h., DefWindowProc sendet bei einem Klick mit der rechten Maustaste eine WM_CONTEXTMENU-Nachricht und leitet sie an das übergeordnete Element weiter. Wenn DefWindowProc eine WM_APPCOMMAND Nachricht für ein Fenster der obersten Ebene empfängt, wird außerdem ein Shell-Hook mit Code HSHELL_APPCOMMAND aufgerufen.

Windows unterstützt auch den Microsoft IntelliMouse-Explorer, bei dem es sich um eine Maus mit fünf Schaltflächen handelt. Die beiden zusätzlichen Schaltflächen unterstützen die Vorwärts- und Rückwärtsnavigation im Browser. Weitere Informationen finden Sie unter XBUTTONs.

Simulieren der Eingabe

Verwenden Sie die SendInput-Funktion , um eine unterbrechungsfreie Serie von Benutzereingabeereignissen zu simulieren. Die Funktion akzeptiert drei Parameter. Der erste Parameter ( cInputs) gibt die Anzahl der Eingabeereignisse an, die simuliert werden. Der zweite Parameter, rgInputs, ist ein Array von INPUT-Strukturen , die jeweils einen Eingabeereignistyp und zusätzliche Informationen zu diesem Ereignis beschreiben. Der letzte Parameter cbSize akzeptiert die Größe der INPUT-Struktur in Byte.

Die SendInput-Funktion funktioniert, indem eine Reihe simulierter Eingabeereignisse in den Eingabedatenstrom eines Geräts eingefügt wird. Der Effekt ähnelt dem wiederholten Aufrufen der keybd_event oder mouse_event-Funktion, außer dass das System sicherstellt, dass keine anderen Eingabeereignisse mit den simulierten Ereignissen vermischt werden. Wenn der Aufruf abgeschlossen ist, gibt der Rückgabewert an, wie viele Eingabeereignisse erfolgreich abgespielt wurden. Wenn dieser Wert null ist, wurde die Eingabe blockiert.

Die SendInput-Funktion setzt den aktuellen Zustand der Tastatur nicht zurück. Wenn der Benutzer beim Aufrufen dieser Funktion Tasten gedrückt hält, können diese die von der Funktion generierten Ereignisse beeinträchtigen. Wenn Sie sich Gedanken über mögliche Störungen machen, überprüfen Sie den Zustand der Tastatur mit der GetAsyncKeyState-Funktion , und korrigieren Sie sie bei Bedarf.

Sprachen, Ländereinstellungen und Tastaturbelegungen

Eine Sprache ist eine natürliche Sprache, z. B. Englisch, Französisch und Japanisch. Ein Untersprach ist eine Variante einer natürlichen Sprache, die in einer bestimmten geografischen Region gesprochen wird, z. B. die englischen Untersprachen, die im Vereinigten Königreich und in den Vereinigten Staaten gesprochen werden. Anwendungen verwenden Werte, die als Sprachbezeichner bezeichnet werden, um Sprachen und Untersprachen eindeutig zu identifizieren.

Anwendungen verwenden in der Regel Gebietsschemas , um die Sprache festzulegen, in der Eingabe und Ausgabe verarbeitet werden. Das Festlegen des Gebietsschemas für die Tastatur wirkt sich z. B. auf die von der Tastatur generierten Zeichenwerte aus. Das Festlegen des Gebietsschemas für die Anzeige oder den Drucker wirkt sich auf die angezeigten oder gedruckten Glyphen aus. Anwendungen legen das Gebietsschema für eine Tastatur fest, indem sie Tastaturlayouts laden und verwenden. Sie legen das Gebietsschema für eine Anzeige oder einen Drucker fest, indem sie eine Schriftart auswählen, die das angegebene Gebietsschema unterstützt.

Ein Tastaturlayout gibt nicht nur die physische Position der Tasten auf der Tastatur an, sondern bestimmt auch die Zeichenwerte, die durch Drücken dieser Tasten generiert werden. Jedes Layout identifiziert die aktuelle Eingabesprache und bestimmt, welche Zeichenwerte durch welche Tasten und Tastenkombinationen generiert werden.

Jedes Tastaturlayout verfügt über eine entsprechende Kennung, die das Layout und die Sprache identifiziert. Das untere Wort des Handles ist ein Sprachbezeichner. Das hohe Wort ist ein Gerätgriffe, das das physische Layout angibt oder null ist, was auf das standardmäßige physische Layout hinweist. Der Benutzer kann jede Eingabesprache einem physischen Layout zuordnen. Beispielsweise kann ein englischsprachiger Benutzer, der sehr gelegentlich in Französisch arbeitet, die Eingabesprache der Tastatur auf Französisch festlegen, ohne das physische Layout der Tastatur zu ändern. Dies bedeutet, dass der Benutzer Text in Französisch mit dem vertrauten englischen Layout eingeben kann.

Von Anwendungen wird im Allgemeinen nicht erwartet, dass sie Eingabesprachen direkt manipulieren. Stattdessen richtet der Benutzer Sprach- und Layoutkombinationen ein und wechselt dann dazwischen. Wenn der Benutzer in Text klickt, der mit einer anderen Sprache gekennzeichnet ist, ruft die Anwendung die ActivateKeyboardLayout-Funktion auf, um das Standardlayout des Benutzers für diese Sprache zu aktivieren. Wenn der Benutzer Text in einer Sprache bearbeitet, die sich nicht in der aktiven Liste befindet, kann die Anwendung die LoadKeyboardLayout-Funktion mit der Sprache aufrufen, um ein Layout basierend auf dieser Sprache abzurufen.

Die ActivateKeyboardLayout-Funktion legt die Eingabesprache für die aktuelle Aufgabe fest. Der hkl-Parameter kann entweder das Handle für das Tastaturlayout oder eine null-erweiterte Sprachkennung sein. Tastaturlayoutziehpunkte können über die LoadKeyboardLayout - oder GetKeyboardLayoutList-Funktion abgerufen werden. Die werte HKL_NEXT und HKL_PREV können auch verwendet werden, um die nächste oder vorherige Tastatur auszuwählen.

Die GetKeyboardLayoutName-Funktion ruft den Namen des aktiven Tastaturlayouts für den aufrufenden Thread ab. Wenn eine Anwendung das aktive Layout mithilfe der LoadKeyboardLayout-Funktion erstellt, ruft GetKeyboardLayoutName die gleiche Zeichenfolge ab, die zum Erstellen des Layouts verwendet wird. Ansonsten ist die Zeichenfolge das primäre Sprachkennzeichen, das dem Gebietsschema des aktiven Layouts entspricht. Dies bedeutet, dass die Funktion möglicherweise nicht unbedingt zwischen verschiedenen Layouts mit derselben Primärsprache unterscheidet, sodass keine spezifischen Informationen über die Eingabesprache zurückgegeben werden können. Die GetKeyboardLayout-Funktion kann jedoch verwendet werden, um die Eingabesprache zu bestimmen.

Die LoadKeyboardLayout-Funktion lädt ein Tastaturlayout und stellt dem Benutzer das Layout zur Verfügung. Anwendungen können das Layout sofort für den aktuellen Thread mithilfe des KLF_ACTIVATE-Werts aktiv machen. Eine Anwendung kann den KLF_REORDER Wert verwenden, um die Layouts neu anzuordnen, ohne auch den KLF_ACTIVATE Wert anzugeben. Anwendungen sollten beim Laden von Tastaturlayouts immer den wert KLF_SUBSTITUTE_OK verwenden, um sicherzustellen, dass die Benutzereinstellung (falls vorhanden) ausgewählt ist.

Für mehrsprachige Unterstützung stellt die LoadKeyboardLayout-Funktion die KLF_REPLACELANG und KLF_NOTELLSHELL Flags bereit. Das KLF_REPLACELANG Flag leitet die Funktion an, ein vorhandenes Tastaturlayout zu ersetzen, ohne die Sprache zu ändern. Beim Versuch, mithilfe desselben Sprachbezeichners ein vorhandenes Layout zu ersetzen, ohne KLF_REPLACELANG anzugeben, liegt ein Fehler vor. Das kennzeichen KLF_NOTELLSHELL verhindert, dass die Funktion die Shell benachrichtigt, wenn ein Tastaturlayout hinzugefügt oder ersetzt wird. Dies ist nützlich für Anwendungen, die mehrere Layouts in einer aufeinander folgenden Reihe von Aufrufen hinzufügen. Dieses Kennzeichen sollte nur im letzten Anruf verwendet werden.

Die Funktion "UnloadKeyboardLayout " ist eingeschränkt, da sie die Standardeingabesprache des Systems nicht entladen kann. Dadurch wird sichergestellt, dass der Benutzer immer ein Layout für die Texteingabe mit demselben Zeichensatz wie in der Shell und dem Dateisystem zur Verfügung hat.