Bot Problem C++

02/09/2010 21:40 Σternαl.#1
Hey liebe Comunity,
ich bin neu hier in der GW Section und ich hab da ein Problem.
Und zwar hab ich mir mit etwas Hilfe mal einen kleinen Bot in C++ gebastelt,
der erstmal einfach ununterbrochen auf w drücken soll.
Deshalb wundert euch nicht über "while(wHandle > NULL)", das hab ich
einfach nur als Mittel benutzt, um w unendlich lange drücken zu lassen ^^

Nur mein Problem ist jetzt, dass egal welche Taste ich als "zu drückende Taste"
eingebe, der Bot drückt immer auf i.
Ist das ein Antibotsystem oder darf man nicht als Parameter "w" nehmen?

Als kleine Info/Vorbeugung von Flames:
#Ich bin C++ Anfänger, deshalb bitte nicht so hard zu mir sein :)
#Ich hab vorher noch nie nen Bot geschrieben und hab mir mein "Wissen"
größtenteils von msdn geholt^^

Btw:
Ich bin mir da echt nicht sicher mit dem "w" als Parameter.
Ich hab nämlich im Internet auch oft etwas wie 0x07500 oder so gesehen.
Hab auch gesagt bekommen, dass das Hexwerte für die Tasten sind,
aber gibts irgendwo ne Tabelle, wo man die Hex Werte nachgucken kann?

Ich hoffe ihr könnt mir helfen,
Thx schonmal im Voraus^^

€dit: Gott, bin ich blöd :facepalm:
Hier der Source^^
Code:
#include <iostream>
#include <windows.h>
#include <Winuser.h>

using namespace std;

int main()
{
    cout << "Starteee!!!!" << endl;

	HWND wHandle = FindWindow(0,L"Guild Wars");
		if(!wHandle)
		{
			cout << "Starte das verdammte Spiiiieeeelll!!!!" 
			<< " Errorcode: " << GetLastError() << '\n' << endl;
		}
	
		else
		{
			cout << "WindowHandle: " << wHandle << endl;

				while(wHandle > NULL)
				{
					SendMessage(wHandle, WM_KEYDOWN, NULL, (LPARAM) "w");
					SendMessage(wHandle, WM_KEYUP, NULL, (LPARAM) "w");

				}
		}
}
02/10/2010 15:05 ddl#2
[Only registered and activated users can see links. Click Here To Register...]
02/10/2010 15:07 Σternαl.#3
Und das jetzt anstelle von "w" einsetzen, oder soll ich damit ein anderes Parameter ersetzen?
02/10/2010 15:14 ddl#4
probiers mal über:

SendMessage(wHandle, WM_KEYDOWN, VK_KEY_W)

oder über den HEX Wert
02/10/2010 15:23 Σternαl.#5
Code:
while(wHandle > NULL)
				{
					SendMessage(wHandle, WM_KEYDOWN, NULL, 0x57);
					SendMessage(wHandle, WM_KEYUP, NULL, 0x57); 
				}
Da Macht er garnix

und bei

Code:
while(wHandle > NULL)
				{
					SendMessage(wHandle, WM_KEYDOWN, NULL, VK_KEY_W);
					SendMessage(wHandle, WM_KEYUP, NULL, VK_KEY_W); 
				}
sagt mir der Compiler: nichtdeklarierter Bezeichner.
02/10/2010 15:49 Valvepro#6
Hi - versuche mal dies! (Ist aber nicht für schreiben in den Chat!!!)
Erweitere sie dir wie DU willst.

PHP Code:
#include <iostream>
#include <windows.h>

void SendKey(charWindow,charKEY){
    
HWND hWND FindWindow(NULLWindow);int vKeySend;
    for(
int i=0;i<=0xFF;i++)if(MapVirtualKeyA(i,2) == toupper(*KEY))vKeySend i;
    
LPARAM pmLparam = (MapVirtualKey(vKeySend0) << 16);
    
PostMessage(hWNDWM_KEYDOWN0x0pmLparam);
    
PostMessage(hWNDWM_CHAR0x0pmLparam);
    
Sleep(100);
    
PostMessage(hWNDWM_KEYUP0x0pmLparam);


int main(){
do{
   
SendKey("Guild Wars","w");
}while(
1);
system("pause");
return 
0;

Falls du jedoch etwas in den Chat schreiben willst kannst du dies so machen:

PHP Code:
void WriteToChat(charWindow,charWrite){
    
HWND hwnd FindWindow(NULLWindow);long key;
    
PostMessage(hwndWM_KEYDOWN0x0000000D0x001C0001);
    
PostMessage(hwndWM_KEYUP0x0000000D0x001C0001);
    
Sleep(100);
    for(
unsigned int i=0;i<strlen(Write);i++){
        for(
int e=0;e<=0xFF;e++)if(MapVirtualKeyA(e,2) == toupper(Write[i]))key e;
        
PostMessage(hwndWM_KEYDOWNkeyNULL);
    }
    
Sleep(100);
    
PostMessage(hwndWM_KEYDOWN0x0000000D0x001C0001);
    
PostMessage(hwndWM_KEYUP0x0000000D0x001C0001);

02/10/2010 16:00 Σternαl.#7
Danke erstmal, aber ich bin ja noch Anfänger, vllt könntest du mir deine Funktionsweise
erklären, weil ich das auch lernen will und nicht nur copy & paste ^^

Btw hier mal der ganze Source:

PHP Code:
#include <iostream> 
#include <windows.h> 
#include <Winuser.h> 




using namespace std

int main() 

    
cout << "Starteee!!!!" << endl

    
HWND wHandle FindWindow(0,L"Guild Wars"); 
        if(!
wHandle
        { 
            
cout << "Starte das verdammte Spiiiieeeelll!!!!"  
            
<< " Errorcode: " << GetLastError() << '\n' << endl
        } 
     
        else 
        { 
            
cout << "WindowHandle: " << wHandle << endl

                while(
wHandle
                { 
                    
LPARAM lParam 0x57
                    
SendMessage(wHandleWM_KEYDOWNNULLlParam); 
                    
SendMessage(wHandleWM_KEYUPNULLlParam);  

                } 
        } 

02/11/2010 18:54 kknb#8
hm und ich dachte in dem anderen thread wurde dir alles 321324 fach erklärt.
[Only registered and activated users can see links. Click Here To Register...]
02/12/2010 22:12 Σternαl.#9
Den Thread hier hab ich vor dem in der Coding Section erstellt.....
Und übrigens alles 321324 fach erklärt war das allemal nicht.
Hast du es verstanden?
Und nach 3 Tagen rumbetteln und rumflamen kam dann endlich ne Lösung,
die nicht geklappt hat, weil ich eine andere Funktion brauche.
Und das nennst du 32134whatever fach erklärt??
02/14/2010 23:16 MrSm!th#10
Quote:
Originally Posted by FooFightah View Post
Den Thread hier hab ich vor dem in der Coding Section erstellt.....
Und übrigens alles 321324 fach erklärt war das allemal nicht.
Hast du es verstanden?
Und nach 3 Tagen rumbetteln und rumflamen kam dann endlich ne Lösung,
die nicht geklappt hat, weil ich eine andere Funktion brauche.
Und das nennst du 32134whatever fach erklärt??
ja, ich nenne das so ;)
Du musst wie schon so oft gesagt, die Sprache erst lernen.
Und ganz ehrlich, wo ist bei DirectInput nun das Problem?
02/15/2010 12:41 Σternαl.#11
Mein Problem liegt - wie schon mehrmals erklärt - darin,
dass ich nicht weiß, wie ich SendInput benutzen soll.
Also welche Syntax die Funktion hat, wie ich jetzt die Parameter
für die Strukturen etc hinbekomme und wie das ganze Grundchema überhaupt aussieht....
02/16/2010 02:01 MrSm!th#12
Meiiiiin Gott, dann lern endlich diese Sprache und wie man mit der MSDN umgeht.
Bist du echt zu faul, mal einmal dein Hirn und deine Augen zu nutzen?

So, 5 Minuten in der MSDN alles durchgelesen, 5min bisschen gegooglet und dabei ist dieses funktionierende C&P (C&P für dich; ich habe den Code selbst geschrieben versteht sich) Beispiel entstanden:
Code:
#include <windows.h>
#include <iostream>

int WINAPI WinMain(HINSTANCE hi,HINSTANCE hPrev,LPSTR Cmdline,int nShowCmd)
{
	HWND GW = NULL;
	do
	{
		GW = FindWindow(NULL,L"Guild Wars");
		Sleep(100);
	} while(!GW);
	SetForegroundWindow(GW);
	INPUT input;
	input.type = INPUT_KEYBOARD;
	input.ki.wVk =0x57;	//"W"   falls es nicht geht 0x77 für "w"
	input.ki.dwFlags = 0;
	input.ki.time = 0;
	input.ki.wScan = MapVirtualKey(0x57,0); // s.o.
	input.ki.dwExtraInfo = 0;
	SendInput(1,&input,sizeof(input));
	return 0;
}
oder das hier:

Code:
HWND GW = NULL;
do
{
	GW = FindWindow(NULL,L"Guild Wars");
	Sleep(100);
} while(!GW);
SetForegroundWindow(GW);
keybd_event(VkKeyScan('w'),MapVirtualKey(VkKeyScan('w'),0),0,0);
Sooo schwer, mal ein bisschen die MSDN zu durchstöbern :rolleyes:
02/16/2010 19:27 Σternαl.#13
VIIIELEN Dank dass du mir das gemacht hast^^
Aber irgendwie klappt es nicht, auch mit 0x77 nicht.
Btw warum hast du HWND GW = NULL geschrieben?
Und bei dem Code mit keybd_event zeigt gibt der Compiler Syntax Fehler und
zu viele Inistialisierungen aus.
02/16/2010 23:37 MrSm!th#14
Der Code geht so, wie er da steht; selbst getestet.

Also in S4 bin war ich ein Dauer-Gegen-Die-Wand-Läufer :D
Kann sein, dass GW irgendnen Schutz gegen sowas hat.
Obwohl, mit Autoit gehts ja auch, und Autoit übersetzt den Code ja nur in C++ Code, also muss es irgendwie gehen...
Das mit NULL schreibe ich einfach, weil eine Variable initialisiert wird, bevor sie verwendet wird ;D (ich weiß, ist da nicht unbedingt nötig, aber hab es mir so angewöhnt)

edit: Habs mit GW getestet; geht super.
02/17/2010 14:27 Σternαl.#15
Also nochmal zur Verständnis, soll ich bei dem obigen Code nur C&P, also nur diesen code?
Weil wenn ich das mache meckert der Compiler wegen:
"nicht aufgelöstes externes Symbol "_main" in Funktion "_tmainCRTStartup".
und
"nicht aufgelöste externe Verweise".

Aber beim 1. mal hab ich den Code nicht einfach nur eingefügt,
sondern noch ne main Funktion reingemacht, das brauch doch jedes C++ Programm oder?

Also meine main sah nur so aus, muss ja nix besonderes sein.

PHP Code:
int main()
{
       
std::cout << "Hallo" << std::endl;

Und vllt hilft es ja, ich denke SetForegroundWindow(Gw) bewirkt
wie in AutoIt WinActivate(), dass das Fenster in den Vordergrund (is ja klar, Foreground) kommt.
Jedoch hat das Programm mit keybd_event das nicht gemacht.
Also ich hab keine Ahnung, worans liegen kann.....

Wie gesagt mit AutoIt gehts super:


Und hier nochmal der Source in C++.
Also compiled ohne Probleme aber funktioniert halt nicht.

Und bitte nicht flamen, wenn der C++ Source falsch ist :(