
Benutzer1806687
ich fand dieses Stück Code online:
CHAR getch() {
DWORD mode, cc;
HANDLE h = GetStdHandle( STD_INPUT_HANDLE );
if (h == NULL) {
return 0; // console not found
}
GetConsoleMode( h, &mode );
SetConsoleMode( h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT) );
TCHAR c = 0;
ReadConsole( h, &c, 1, &cc, NULL );
SetConsoleMode( h, mode );
return c;
}
Verwenden Sie es wie:
while(1) {
TCHAR key = getch();
}
Ich bin in der Lage, numerische, alphabetische und sogar Return-Tastendrücke zu erhalten. Aber ich bin nicht in der Lage, Escape oder andere Funktionstasten wie Strg, Alt zu bekommen. Ist es möglich, es zu ändern, um auch diese Schlüssel zu erkennen?
Wenn Dinge wie Strg- und Alt-Tasten, dies virtuelle Tastenanschläge sind, sind sie Ergänzungen zu Zeichen. Sie müssen verwenden ReadConsoleInput
. Aber Sie werden alles bekommen, die Maus auch. Sie müssen also wirklich eine Struktur aus dem Aufruf filtern und zurückgeben, damit Sie wissen, ob es sich um Strg-A Alt-A handelt. Filtern Sie Wiederholungen, wenn Sie sie nicht möchten.
Dies kann Arbeit erfordern, weiß nicht, was Sie suchen …
bool getconchar( KEY_EVENT_RECORD& krec )
{
DWORD cc;
INPUT_RECORD irec;
HANDLE h = GetStdHandle( STD_INPUT_HANDLE );
if (h == NULL)
{
return false; // console not found
}
for( ; ; )
{
ReadConsoleInput( h, &irec, 1, &cc );
if( irec.EventType == KEY_EVENT
&& ((KEY_EVENT_RECORD&)irec.Event).bKeyDown
)//&& ! ((KEY_EVENT_RECORD&)irec.Event).wRepeatCount )
{
krec= (KEY_EVENT_RECORD&)irec.Event;
return true;
}
}
return false; //future ????
}
int main( )
{
KEY_EVENT_RECORD key;
for( ; ; )
{
getconchar( key );
std::cout << "key: " << key.uChar.AsciiChar
<< " code: " << key.wVirtualKeyCode << std::endl;
}
}
ReadConsoleInput-Funktion
INPUT_RECORD-Struktur
KEY_EVENT_RECORD-Struktur
Virtuelle Schlüsselcodes

Stig Rosenlund
Der folgende Code erfasst jeden Tastendruck. Es wird verwendet, um von einer Funktion zurückzukehren.
Dokumentation:
https://docs.microsoft.com/en-us/windows/console/readconsoleinput?redirectedfrom=MSDN
https://docs.microsoft.com/en-us/windows/console/input-record-str?redirectedfrom=MSDN
https://docs.microsoft.com/en-us/windows/console/key-event-record-str?redirectedfrom=MSDN
Zweck Die Funktion führt einige Berechnungen durch, deren Fortschritt dem Benutzer auf der Konsole angezeigt wird. Wenn alles fertig ist, möchte der Benutzer von der Funktion zurückkehren. Sie tut das, indem sie eine beliebige Taste drückt. In allen meinen anderen Anwendungen kann der Benutzer mit der Esc-Taste zurückkehren, also ist es schön, dass das auch hier funktioniert.
Es funktioniert, indem es die Konsole zuweist und Handles für die Ausgabe von und die Eingabe in die Konsole setzt. Flags OKflg_out und OKflg_in werden gesetzt, um die Operationen am Ende zu verifizieren. Die for (; ;)-Schleife nach der Meldung „Press any key.“ an den Benutzer endet, wenn der Benutzer eine Taste drückt.
Der numerische Code für die gedrückte Taste ist (((irec.Event).KeyEvent).uChar).AsciiChar, wird hier aber nicht verwendet. Es könnte natürlich als Rückgabecode verwendet werden, um die folgenden Aktionen in der aufrufenden Funktion festzulegen.
#include <windows.h>
// Various other includes.
void wrintf0(HANDLE stdOut, unsigned char *message)
{
DWORD written=0;
WriteConsoleA(stdOut, message, strleni(message), &written, NULL);
}
#define wrintf(message) wrintf0(stdOut,message)
// Various code lines.
void Myfunction(void)
{
unsigned char OKflg_in=0,OKflg_out=0;
HANDLE stdIn,stdOut;
// Various code lines.
AllocConsole();
stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (stdOut != NULL && stdOut != INVALID_HANDLE_VALUE)
{
OKflg_out = 1;
stdIn = GetStdHandle(STD_INPUT_HANDLE);
if (stdIn != NULL && stdIn != INVALID_HANDLE_VALUE) OKflg_in = 1;
}
// Various code lines.
if (OKflg_out)
{
if (OKflg_in)
{
DWORD cc;
INPUT_RECORD irec;
wrintf("Press any key.");
for(; ;) {
ReadConsoleInput(stdIn, &irec, 1, &cc );
if (irec.EventType == KEY_EVENT && ((irec.Event).KeyEvent).bKeyDown) break;
}
CloseHandle(stdIn);
}
CloseHandle(stdOut);
}
FreeConsole();
return;
}
Sie haben viele Möglichkeiten, die Tastatureingaben zu erhalten
Sie können GetAsyncKeyState verwenden https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms646293(v=vs.85).aspx
oder GetKeyState https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms646301.aspx
die weitaus besser sind als Getch
10126600cookie-checkTastendruck in der Windows-Konsole abrufenyes