Also hab was im forum gefunden und fand sehr witzig , also mal sehen ob ihr es schafft den fehler zufinden aehmm sagen wir wenn ihr bis 20uhr nix hinbekommen habt gebe ich euch einen tipp Ok hier kommt es :
Guten Tag allerseits,
Ich möchte lernen, Makros in C++ zu schreiben. Da ein Kumpel und ich abundzu mal Guild Wars spielen, dachte ich mir, schreibste doch mal ne automatisierung zum Üben. Prinipiell ist das auch kein Problem, denn die Funktionen, die ich dazu brauche habe ich bereits geschrieben. Zuerst habe ich das senden von Keystrokes mit der keybd_event Funktion probiert. Es ging alles gut, mein Programm konnte alles mögliche in eine Textdokument schreiben. Das Problem ist nur, dass im Spiel keine Hotkeys ausgelöst werden. Also es poppt ein Fenster im Spiel auf und normal drücke ich Enter um das wegzubekommen. Wenn ich das Enterdrücken mit meinem Programm machen möchte, so reagiert das Fenster im Spiel aber nicht. Jedes andere Fenster reagiert.. habe mal eine MessageBox kreiert und diese mittels des virtuellen Enterdrucks geschlossen. Dann dachte ich, dass liegt vielleicht daran, dass keybd_event veraltet ist. Daher benutze ich SendInput. Hier genau das selbe, im Textdokument wird alles geschrieben, allerdings reagiert das Spiel nicht auf die virtuelle Tasteneingabe. Ich habe alles mir mögliche getan, habe es in den Focus + Vordergrund gesetzt..
Dann habe ich es mit Attachments versucht:
Theoretisch funktioniert das auch alles, nur nicht im Spiel. Das Problem ist, ich habe mich jetzt richtig in das Problem reingesteigert und will das jetzt lösen, sonst kann ich nicht gut schlafen
Hier sind mal die Funktionen:
Hier die keybd_event Funktion:
Desweitern kennt bestimmt jeder die Scriptsprache AutoIt. Die Script die ich dort schreiben kann, funktionieren. Also sie schreiben Text und das Spiel reagiert auch auf die virtuellen Eingaben.
Ich überlege, mir den Sourcecode runterzuladen und mir die Funktion einmal in C++ anzuschauen, nur weiss ich nicht ob das so legitim ist.
Liebe Grüße
Also es ist eigentlich easy haut rein ...
GreeTz
Guten Tag allerseits,
Ich möchte lernen, Makros in C++ zu schreiben. Da ein Kumpel und ich abundzu mal Guild Wars spielen, dachte ich mir, schreibste doch mal ne automatisierung zum Üben. Prinipiell ist das auch kein Problem, denn die Funktionen, die ich dazu brauche habe ich bereits geschrieben. Zuerst habe ich das senden von Keystrokes mit der keybd_event Funktion probiert. Es ging alles gut, mein Programm konnte alles mögliche in eine Textdokument schreiben. Das Problem ist nur, dass im Spiel keine Hotkeys ausgelöst werden. Also es poppt ein Fenster im Spiel auf und normal drücke ich Enter um das wegzubekommen. Wenn ich das Enterdrücken mit meinem Programm machen möchte, so reagiert das Fenster im Spiel aber nicht. Jedes andere Fenster reagiert.. habe mal eine MessageBox kreiert und diese mittels des virtuellen Enterdrucks geschlossen. Dann dachte ich, dass liegt vielleicht daran, dass keybd_event veraltet ist. Daher benutze ich SendInput. Hier genau das selbe, im Textdokument wird alles geschrieben, allerdings reagiert das Spiel nicht auf die virtuelle Tasteneingabe. Ich habe alles mir mögliche getan, habe es in den Focus + Vordergrund gesetzt..
C/C++ Code:
targetHWND=FindWindowA(NULL,"Guild Wars");
SetFocus(targetHWND);
SetForegroundWindow(targetHWND);
Dann habe ich es mit Attachments versucht:
1 thisThread=GetCurrentThreadId();
2 otherThread=GetWindowThreadProcessId(targetHWND,NULL);
3
4
5
6 //Verbinden....
7
8 if(!AttachThreadInput(thisThread,otherThread,true))
9 {
10 MessageBoxA(0,"Mistake","Attachment failed",0);
11 }
Theoretisch funktioniert das auch alles, nur nicht im Spiel. Das Problem ist, ich habe mich jetzt richtig in das Problem reingesteigert und will das jetzt lösen, sonst kann ich nicht gut schlafen
![Smile :) :)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
1 void sendakey(int mykey)
2 {
3
4 INPUT input[2];
5 memset(input, 0, sizeof(input));
6 input[0].type = INPUT_KEYBOARD;
7
8
9 input[0].ki.wVk = mykey;
10 input[0].ki.dwFlags = 0;
11 input[0].ki.time = 0;
12 input[0].ki.dwExtraInfo = 0;
13
14 input[1].ki.wVk = mykey;
15 input[1].ki.dwFlags = KEYEVENTF_KEYUP;
16 input[1].ki.time = 0;
17 input[1].ki.dwExtraInfo = 0;
18
19 SendInput(2,input,sizeof(INPUT));
20 }
Hier die keybd_event Funktion:
void sendkey(int key)
{
keybd_event(key, 0, 0, 0);
keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
}
Desweitern kennt bestimmt jeder die Scriptsprache AutoIt. Die Script die ich dort schreiben kann, funktionieren. Also sie schreiben Text und das Spiel reagiert auch auf die virtuellen Eingaben.
Ich überlege, mir den Sourcecode runterzuladen und mir die Funktion einmal in C++ anzuschauen, nur weiss ich nicht ob das so legitim ist.
Liebe Grüße
Also es ist eigentlich easy haut rein ...
GreeTz
Zuletzt bearbeitet: