Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
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 .
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
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:
- SysRq-Tastenscancode wird auf alt+Print-Tastenanschlägen ausgegeben.
- Break-Tastencode wird bei Betätigung von STRG+Pause ausgegeben.
- Wie in älteren Tastaturnachrichten zu sehen
- Die Taste ist auf brasilianischen Tastaturen vorhanden.
- Die Taste ist auf japanischen Tastaturen vorhanden.
- 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:
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.