Tastertureingabe abfangen im laufende c++ Programm
-
Hallo,
wie lässt sich eine Tasteneingabe in einer laufenden nativen c++ Applikation abfangen?
Danke im Vorraus
-
Bronkobob schrieb:
wie lässt sich eine Tasteneingabe in einer laufenden nativen c++ Applikation abfangen?
Du musst schon genauer werden, was für eine c++ Anwendung es ist (UI oder Console, verwendetes Framework...).
In einem Konsolenprogramm könnte man es vielleicht mit Threading versuchen, wo ein Thread in regelmäßigen Abständen den Tastenstatus abfragt. In einem UI basierten Programm gibt es dafür zumeist das Eventhandling...
-
Tastatur-Hook?
-
Es handelt sich um eine Win32 Konsolenaplikation, die in einer whileschleife laufen soll bis eine Taste gedrückt wird. Wie funktioniert das mit Tastatur-Hook?
-
//EDIT: Nichts.
-
Kein Hook, einfach:
#include <windows.h> #include <iostream> bool keyPressed() { INPUT_RECORD ir; DWORD dummy; PeekConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &ir, 1, &dummy); return dummy == 1; } int main() { while(!keyPressed()) { std::cout << "keine Taste gedrueckt\n"; Sleep(1000); } std::cout << "\n*** Taste gedrueckt ***\n"; }
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Vielen Dank für den Codeausschnitt, bei mir funktioniert es aber noch nicht ganz die schleife wird gar nicht erst durchlaufen.
-
Interessant ... das ist allerdings kein Codeausschnitt, sondern ein vollständig lauffähiges Programm ... und macht hier auch, was es soll ...
Aber Achtung:
So, wie es da jetzt geschrieben ist, werden keine Input-Ereignisse aus dem Input-Puffer entfernt, d.h., wenn Du diese Funktion aufrufst, nachdem sie einmal ein Zeichen gefunden hat, und dieses Zeichen nicht explizit 'wegliest', wird sie immer true zurückliefern.
-
Hallo,
peekconsoleInput reagiert auch auf Mausbewegungen und das wollte ich vermeiden. Habe es jetzt mitwhile(!kbhit())
gelöst...
-
Man kann natürlich in keyPressed feststellen, ob der Input von einem Mausereignis oder von der Tastatur kommt - aber wenn Du eine Lösung gefunden hast, ist es ja gut.