Tastatur einlesen!!
-
Hi,
ich versuche einen Trainer für Spiele zu programmieren. Ich möchte ihn im Hintergrund laufen lassen, und er soll auf Tastatureingaben (z.B F8) reagieren und dann in der jeweiligen Speicheradresse den Wert ändern. Klappt auch alles, ausser....
Das Problem:
Das Prog, das die Tasten einließt verlangsamt das System so stark, das das Spiel zu stark ruckelt.
Der Quellcode:
#include <windows.h> #include <iostream> using namespace std; int main() { SHORT KeyState; SHORT ArrKeyState[256]; long CheckSum; long OldCheckSum; OldCheckSum = 987654; // dummy 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) { cout << "Key " << i << " pressed. (" << (char) i << ")" << endl; } } } OldCheckSum = CheckSum; } }Die Frage:
Was in diesem Programm macht den Rechner so langsam?
-
mr_lou schrieb:
Was in diesem Programm macht den Rechner so langsam?
dein ansatz
du solltest nicht in ner while schleife die tasten prüfen, sondern dein programm sollte von windows benachrichtigt werden wenn eine taste gedrückt wird
-
wie geht das?
-
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/keyboardproc.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/lowlevelkeyboardproc.asp
-
könnte irgendjemand vielleicht ein paar schlüsselwörter posten, damit ich wenigstens mal in einschlägigen Suchmaschinen suchen könnte?
-
danke, ich werd mir das mal durchlesen.
-
aber bevor du es ließt, probier doch mal
#include <windows.h> #include <iostream> using namespace std; int main() { SHORT KeyState; SHORT ArrKeyState[256]; long CheckSum; long OldCheckSum; OldCheckSum = 987654; // dummy while (1) { Sleep(10); 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) { cout << "Key " << i << " pressed. (" << (char) i << ")" << endl; } } } OldCheckSum = CheckSum; } }
-
Danke, es klappt!!

Wenn mein GTA: San Andreas Trainer fertig ist erwähn ich dich in den Credits!
-
mr_lou schrieb:
Danke, es klappt!!

Wenn mein GTA: San Andreas Trainer fertig ist erwähn ich dich in den Credits!ob er das will?

-
wenns ein nocd-crack wär, würd ich verstehen, aber was ist denn an einem trainer schlimm?
-
mr_lou schrieb:
Danke, es klappt!!

Wenn mein GTA: San Andreas Trainer fertig ist erwähn ich dich in den Credits!und am schluß schreibste noch rein, ich hätte emplohlen, mit 100Hz alle tasten zu pollen, statt Sovoks hook zu nehmen.
ich möchte klarstellen, daß Sovoks methode auf jeden fall vorzuziehen ist. das rettende Sleep() sollste immer in poll-schleifen einbauen, um ganz viel prozessorzeit zu sparen. aber pollen soll immer nur notlösung sein.
ich dachte mir, das ist die aber im momentchen erstmal egal und du kümmerst dich lieber um das speicherzellenschreiben. tu das. aber später, wenn es langsam fertige form annimmt, wirf bitte die poll-schleife raus.
und schreib in die credits, ich hätte geschrieben, sovok solle da rein, oder sowas.

-
alles klar!