|
You last visited: Today at 14:19
Advertisement
Bot Problem C++
Discussion on Bot Problem C++ within the GW Bots forum part of the Guild Wars category.
02/09/2010, 21:40
|
#1
|
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
|
Bot Problem C++
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
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
|
#2
|
elite*gold: 100
Join Date: Oct 2007
Posts: 738
Received Thanks: 485
|
|
|
|
02/10/2010, 15:07
|
#3
|
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
|
Und das jetzt anstelle von "w" einsetzen, oder soll ich damit ein anderes Parameter ersetzen?
|
|
|
02/10/2010, 15:14
|
#4
|
elite*gold: 100
Join Date: Oct 2007
Posts: 738
Received Thanks: 485
|
probiers mal über:
SendMessage(wHandle, WM_KEYDOWN, VK_KEY_W)
oder über den HEX Wert
|
|
|
02/10/2010, 15:23
|
#5
|
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
|
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
|
#6
|
elite*gold: 0
Join Date: Mar 2008
Posts: 374
Received Thanks: 198
|
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(char* Window,char* KEY){ HWND hWND = FindWindow(NULL, Window);int vKeySend; for(int i=0;i<=0xFF;i++)if(MapVirtualKeyA(i,2) == toupper(*KEY))vKeySend = i; LPARAM pmLparam = (MapVirtualKey(vKeySend, 0) << 16); PostMessage(hWND, WM_KEYDOWN, 0x0, pmLparam); PostMessage(hWND, WM_CHAR, 0x0, pmLparam); Sleep(100); PostMessage(hWND, WM_KEYUP, 0x0, pmLparam); } 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(char* Window,char* Write){ HWND hwnd = FindWindow(NULL, Window);long key; PostMessage(hwnd, WM_KEYDOWN, 0x0000000D, 0x001C0001); PostMessage(hwnd, WM_KEYUP, 0x0000000D, 0x001C0001); 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(hwnd, WM_KEYDOWN, key, NULL); } Sleep(100); PostMessage(hwnd, WM_KEYDOWN, 0x0000000D, 0x001C0001); PostMessage(hwnd, WM_KEYUP, 0x0000000D, 0x001C0001); }
|
|
|
02/10/2010, 16:00
|
#7
|
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
|
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(wHandle, WM_KEYDOWN, NULL, lParam); SendMessage(wHandle, WM_KEYUP, NULL, lParam); } } }
|
|
|
02/11/2010, 18:54
|
#8
|
elite*gold: 20
Join Date: Feb 2007
Posts: 3,080
Received Thanks: 4,294
|
hm und ich dachte in dem anderen thread wurde dir alles 321324 fach erklärt.
|
|
|
02/12/2010, 22:12
|
#9
|
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
|
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
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Originally Posted by FooFightah
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
|
#11
|
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
|
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
|
#12
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
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
|
|
|
02/16/2010, 19:27
|
#13
|
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
|
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
|
#14
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Der Code geht so, wie er da steht; selbst getestet.
Also in S4 bin war ich ein Dauer-Gegen-Die-Wand-Läufer
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
|
#15
|
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
|
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:
PHP Code:
$hWnd = WinGetHandle("Guild Wars") ControlSend($hwnd, "", "", "w")
Und hier nochmal der Source in C++.
Also compiled ohne Probleme aber funktioniert halt nicht.
PHP 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; } int main() { std::cout << "Hallo!" << std::endl; }
Und bitte nicht flamen, wenn der C++ Source falsch ist
|
|
|
Similar Threads
|
Metin 2 Pserver Problem/ Lösung für das Matrix Kartennummer Problem
01/04/2010 - Metin2 Private Server - 3 Replies
Hy Leute
Wie in der Überschrift genannt, hab ich gerade ein Problem mit meinem Metin 2Server.
Ich lasse ihn via Loopbackadapter laufen, funktioniert auch ganz gut.
Ich hab aber jetzt das Poblem, das in meinem Account nur noch Krieger mit Level null stehen.
Wie kann ich das Beheben??, das is auch manchmal da, wenn ich via Navicat n neuen Account mach. Hoffe einer hatt ne Lösung
Hab n Screenshot im Anhang
Aber ich hab ja auch ne Lösung für n anderes Problem.
Gestern hatte ich beim...
|
[Problem] Problem with server starting - cannot find quest index for PaxHeader
12/22/2009 - Metin2 Private Server - 1 Replies
Hello!
I have this same problem as here when i'm starting my server:
http://www.elitepvpers.com/forum/metin2-pserver-di scussions-questions/307143-metin2-serverfiles-ques t-index-fehler.html
But I didn't know the answer.. how to repair this?
Greetings
|
All times are GMT +2. The time now is 14:19.
|
|