Tastendruck in Windows mit C++ erkennen
- Arten von Windows-Anwendungen, die C++ verwenden
- Tastatureingabe in Windows-Anwendungen mit C++
- Tastendruck in Windows mit C++ erkennen
In dieser kurzen Anleitung wird erläutert, wie wir Tastendrücke in Windows-Anwendungen mit C++ handhaben können. Bevor wir fortfahren, sehen wir uns eine kurze Einführung in Windows-Anwendungen mit C++ an.
Arten von Windows-Anwendungen, die C++ verwenden
Es gibt zwei Arten von Anwendungen, die in C++ entwickelt werden können:
-
Konsolenbasierte Anwendungen
Konsolenanwendungen sind solche Anwendungen, die nur über die Befehlszeile ausgeführt werden und nur Text anzeigen können. Daher werden diese auch als Kommandozeilenanwendungen bezeichnet.
-
Fensterbasierte Anwendungen
Während Windows-basierte Anwendungen diejenigen Anwendungen sind, die mit der ursprünglichen nativen Windows-C-API entwickelt und im Gegensatz zu einer konsolenbasierten Anwendung als Fensteranwendung angezeigt werden. Diese Anwendungen werden verwendet, um Software im Fensterformat zu erstellen und können Text, Bilder und alles darin anzeigen.
Es gibt viele Möglichkeiten, Windows-Anwendungen zu entwickeln: Wir können die Win32-API direkt verwenden und eine Schleife im C-Stil erstellen, um Windows-Ereignisse abzuhören. In ähnlicher Weise können Sie auch Windows-Anwendungen mit Microsoft Foundation Classes (MFC), einem objektorientierten Stil, erstellen und die Win32-API umschließen.
Ein Entwickler muss sich speziell mit Windows-Meldungen innerhalb einer Windows-Prozedurfunktion befassen, wenn er ein Win32-Programm erstellt, das in einem Fenster ausgeführt wird. Eine Win32-Anwendung kann als 32-Bit- (x86) oder 64-Bit- (x64) Binärdatei erstellt werden.
Beim Erstellen einer Windows-Anwendung müssen wir uns auch um Tastaturereignisse kümmern.
Tastatureingabe in Windows-Anwendungen mit C++
Die Tastatur wird für eine Vielzahl von Zwecken verwendet, darunter:
- Zeicheneingabe: Text, der vom Benutzer in ein Dokument oder ein Bearbeitungsfeld eingegeben wird.
- Tastenkombinationen: Die Verwendung von CTRL+O zum Öffnen einer Datei ist ein Beispiel für einen Tastendruck, der Anwendungsfunktionen aufruft.
- Befehle vom Betriebssystem: Die Verwendung von ALT+TAB zum Umschalten zwischen Fenstern ist ein Beispiel für einen Tastendruck, der Systemfunktionen aufruft.
Bei der Bedienung der Tastatureingabe muss man sich um alle Fälle eines Tastendrucks kümmern. Wenn zum Beispiel die Taste B
gedrückt wird, kann es zu folgenden Szenarien kommen:
B
b
Wenn außerdem die Strg-Taste gedrückt wird, führt das Drücken der B
-Taste zu der Tastenkombination Strg+B, die die Abkürzung ist Befehl, um Text fett zu machen.
Schlüsselcodes
Das Betriebssystem generiert einen Scancode für eine gedrückte Taste. Diese Scancodes variieren von einer Tastatur zur anderen.
Diese Codes sind für alle Tastaturtasten eindeutig; Beispielsweise haben Schlüssel-Links
und Schlüssel-Rechts
unterschiedliche Scan-Codes. Da diese Codes alphanumerisch und schwer zu merken sind, übersetzt der Tastaturgerätetreiber diese Scancodes in virtuelle Tastencodes, die geräteunabhängig sind.
Die Bibliotheksdatei WinUser.h
definiert die Konstanten für alle virtuellen Tastencodes mit Ausnahme der Zeichen A-Z und der Ziffern 0-9. Ihre virtuellen Codes werden ihren ASCII-Äquivalenten zugeordnet:
- Ziffern 0-9: Codes reichen von 0x30 bis 0x39
- Alphabete A-Z: Codes reichen von 0x41 bis 0x5A
Für alle anderen Tasten sind Konstanten definiert, die den Scancodes dieser Tasten zugeordnet sind; für die linke Pfeiltaste lautet der virtuelle Code beispielsweise VK_LEFT
. Wie oben diskutiert, sind für die Zeichen mit den entsprechenden ASCII-Werten keine virtuellen Codes definiert.
Zum Beispiel gibt es keinen virtuellen Code für das Zeichen B
als VK_B
. Die Liste mit einigen der häufig verwendeten virtuellen Codes ist unten dargestellt:
Virtueller Code | Code scannen | Beschreibung |
---|---|---|
VK_LBUTTON |
0x01 | Linke Maustaste |
VK_RBUTTON |
0x02 | Rechte Maustaste |
VK_CANCEL |
0x03 | Control-Break-Verarbeitung |
VK_MBUTTON |
0x04 | Mittlere Maustaste (Maus mit drei Tasten) |
VK_XBUTTON1 |
0x05 | X1 Maustaste |
VK_XBUTTON2 |
0x06 | X2 Maustaste |
VK_BACK |
0x08 | Rücktaste |
VK_TAB |
0x09 | Tab-Taste |
VK_SHIFT |
0x10 | Shift Taste |
VK_CONTROL |
0x11 | STRG-Taste |
VK_MENU |
0x12 | Alt-Taste |
VK_PAUSE |
0x13 | PAUSE-Taste |
VK_CAPITAL |
0x14 | FESTSTELLTASTE |
VK_NUMPAD0 bis VK_NUMPAD9 |
0x60 - 0x69 | Nummernblock 0-9-Taste |
VK_F1 bis VK_F12 |
0x70 - 0x7B | Funktionstaste F1 bis F12 |
VK_NUMLOCK |
0x90 | NUM-Taste |
VK_SCROLL |
0x91 | SCROLL LOCK-Taste |
VK_LSHIFT |
0xA0 | Linke SHIFT-Taste |
VK_RSHIFT |
0xA1 | Rechte UMSCHALTTASTE |
VK_LCONTROL |
0xA2 | Linke STRG-Taste |
VK_RCONTROL |
0xA3 | Rechte STRG-Taste |
VK_LMENU |
0xA4 | Linke MENÜ-Taste |
VK_RMENU |
0xA5 | Rechte MENÜ-Taste |
Es gibt viele andere Codes, die Sie unter diesem Link finden können.
Tastendruck in Windows mit C++ erkennen
Jedes Mal, wenn eine Taste auf einer Tastatur gedrückt wird, wird ein Ereignis generiert. Eine Nachricht wird generiert, wenn eine Taste gedrückt wird, und diese Nachrichten sind ereignisgesteuert.
Den Zustand der gedrückten Taste können wir mit der Funktion GetKeyState()
abrufen. Diese Funktion nimmt einen virtuellen Tastencode als Argument und gibt ein Flag zurück, das angibt, ob diese Taste gedrückt ist oder nicht.
Interessant ist die Methode GetKeyState()
, die den Status der virtuellen Tastatur zurückgibt. Dieser virtuelle Zustand wird geändert, wenn Nachrichten aus der Warteschlange entfernt werden, und basiert auf dem Inhalt der Nachrichtenwarteschlange.
GetKeyState
stellt eine Momentaufnahme der Tastatur bereit, wenn jede Nachricht in die Warteschlange gestellt wurde, wenn Ihr Programm Fensternachrichten verarbeitet. GetKeyState
meldet den Tastaturzustand, wenn der Benutzer die Maustaste drückt; zum Beispiel, wenn die letzte Nachricht in der Warteschlange WM _BUTTONDOWN
war.
Syntax:
if (GetKeyState(VK_SHIFT) & 0x8000) {
// Shift down
}
Das Bit-Flag 0x8000
bestimmt, ob die Taste gerade gedrückt ist.
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn