Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Guild Wars > GW Bots
You last visited: Today at 04:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Bot Problem C++

Discussion on Bot Problem C++ within the GW Bots forum part of the Guild Wars category.

Closed Thread
 
Old 02/17/2010, 15:35   #16
 
elite*gold: 0
Join Date: Dec 2007
Posts: 81
Received Thanks: 29
lern doch erstmal die grundlagen von c++ oO das was da an code steht zeugt eindeutig davon das du net mal in ansätzen verstanden hast wie man mit c++ Programmiert :S und mit C&P wirst du das niemals lernen lass dir das gesagt sein ich mein in der schule lernste au nix wennde nur abschreibst ....

programmier doch einfach wie alle andern auch erstmal nen Taschenrechner oder was weiß ich da gibts genug tutorials die einem den einstieg ermöglichen! gleich mit sowas anzufangen is schwachsinn... in der schule fängste auch erstmal mit + und - an und net gleich mit Integral rechnung.ohne die nötigen grundlagen wirste niemals weiterkommen.

und ja das is am Anfang vlt mühselig aber du wirst schnell merken das du da wesentlich schneller zum Ziel kommst als wenn du versuchst kurz vorm Ziel anzufangen und jemand der sich mit msdn und google net zu helfen weiß is eindeutig noch net soweit nen Bot zu schreiben ganz davon zu schweigen das man ohne ausreichende englisch kentnisse sowieso aufgeschmissen ist
73rm1n4t0r is offline  
Old 02/17/2010, 15:48   #17
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Ja, kann sein dass du da Recht hast, das hat mir Sm!th auch schon gesagt,
aber ich sags mal so, hab jetzt vor 2 Tagen mal AutoIt gedownloaded und
jetzt kann ich schon problemlos nen gw bot schreiben.
Ich würds halt einfach gern wissen, wies geht in C++.
Σternαl. is offline  
Old 02/17/2010, 15:59   #18
 
elite*gold: 0
Join Date: Dec 2007
Posts: 81
Received Thanks: 29
1. warum nicht GWCA nutzen ? wie man window messages sendet weißte ja hoffentlich
2. google is your friend
3. msdn is your friend too
4. auch wenn du in Autoit nen bot schreiben kannst kann man ohne c++ grundlagen nicht gleich damit anfangen nen c++ bot zu schreiben. und für die grundlagen brauchste wennde wirklich interessiert bist 1-2 tage zumindest wenn man schonmal die grundlagen des Programmieren kennt. ich mein msdn zu verstehen is jetz nich so schwehr notfalls tippste den Befehl mal bei google oder codeproject ein und schaust dir nen paar samples an

€: und ich mein wennde in autoit nen bot schaffst sollte dir zumindest schonmal aufgefallen sein das man ne Funktion auch aufrufen muss wen man se benutzen will
73rm1n4t0r is offline  
Old 02/17/2010, 19:19   #19


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
-.-"

Der Compiler meckert deswegen, weil ich die WinMain habr

Quote:
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?
Bist du echt so unfähig mitzudenken?
Klar braucht das jedes Programm, nur weil mein Projekt als Win32 Projekt eingestellt war, ist es eben die WinMain.
Du musst nur die Funktion in int main() umbennen und C&Pn.
Fertig.
Deshalb ist auch dein Source totaler ****. Die Funktion WinMain wird ja bei dir gar nicht aufgerufen (oder bist du nichtmal so weit in den Grundlagen?)

btw.
@73rm:

weißt du, welche Funktion der WinApi aufgerufen wird, wenn man in Autoit ControlSend nutzt?
Ich denke mal es ist PostMessage aber irgendwie will es damit bei mir auch nicht gehen (und das liegt nicht an GW, auch bei Notepad klappts nicht)
MrSm!th is offline  
Old 02/17/2010, 20:51   #20
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Oh cool, super jetzt klappts
Eine Frage noch, ein Tastendruck besteht ja logischer Weise aus Drücken + Loslassen.
Nur wie mach ich es, dass mein Programm w wieder loslässt?

Btw: Seit wann spielst du Gw? oO
Σternαl. is offline  
Old 02/17/2010, 21:15   #21


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
MSDN is your friend
steht bei der Erklärung von INPUT.ki

seit weiß ich nicht wann

edit: btw mit einmal SendInput wird auch nur einmal w gedrückt; also musst du nix machen, damit es wieder losgelassen wird!
MrSm!th is offline  
Old 02/17/2010, 21:25   #22
 
elite*gold: 0
Join Date: Dec 2007
Posts: 81
Received Thanks: 29
@MrSm!th

Autoit atached sich glaub ich an den Window thread um keys zu senden
Zeile 301 is send und Zeile 442 is WinAttach
73rm1n4t0r is offline  
Old 02/17/2010, 21:32   #23
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Hab mir alles durchgelesen, aber nix gefunden....


Btw wie heißt du in Gw?
Σternαl. is offline  
Old 02/17/2010, 21:57   #24


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by FooFightah View Post
Hab mir alles durchgelesen, aber nix gefunden....


Btw wie heißt du in Gw?
was möchest du denn?
w wird doch sofort wieder losgelassen.

Bei Shift hält er bei mir auch einfach gedrückt und ich kriegs nicht hin, aber das hat etwas andere Gründe, nämlich dass scheinbar etwas nicht geht.

Wenn du richtig gelesen hättest, wüsstest du, dass INPUT::ki.dwExtraInfo mit dem Flag KEYEVENTF_KEYUP belegt werden kann und ich denke, das sagt alles oder?

Allerdings gehts bei mir trotzdem nicht, selbst nachdem mein Programm durchgelaufen ist, wird Shift gedrückt gehalten, bis ich Shift drücke (super jetzt wird Foos Problem zu meinem -.-")

code:

PHP Code:
int WINAPI WinMain(HINSTANCE hi,HINSTANCE hPrev,LPSTR Cmdline,int nShowCmd)
{
    
INPUT input;
    
input.type INPUT_KEYBOARD;
    
input.ki.wVk =VK_SHIFT;
    
input.ki.wScan MapVirtualKey(VK_SHIFT,0);
    
input.ki.dwFlags 0;
    
input.ki.time 0;
    
input.ki.dwExtraInfo 0//oder eben KEYEVENTF_KEYUP
    
SendInput(1,&input,sizeof(input));
/*Hier habe ich probiert, nochmal SendInput zu senden 
(ich weiß, hätte es geklappt, wäre "W" wieder zu "w" geworden, 
aber ich wollte erstmal testen, wie ich das Shift wieder wegbekommen)
 -> klappte nicht; ich habs auch mit input.ki.dwExtraInfo = KEYEVENTF_KEYUP; 
probiert -> klappte nicht */

    
input.ki.wVk =0x57;
    
input.ki.wScan MapVirtualKey(0x57,0);
    
SendInput(1,&input,sizeof(input));

/* Hier habe ich auch schon probiert, es mit dem Flag KEYEVENTF_KEYUP 
zu belgen -> klappte nicht : */
    
input.ki.wVk =VK_SHIFT;
 
//input.ki.dwExtraInfo = KEYEVENTF_KEYUP;
    
input.ki.wScan MapVirtualKey(VK_SHIFT,0);
    
SendInput(1,&input,sizeof(input));
    return 
0;

@73:

Aber ich habe irgendwas von PostMessage gelesen....
Und vor allem:
Selbst wenn es duch attachen gelöst ist; das erklärt, warum es mit PostMessage bei Games nicht geh (falls diese direkten Input nutzen) aber nicht, warum es bei so einfachen Dingen wie Notepad nicht geht.
Es wird doch wohl noch irgendein Programm geben, dass Tastendrücke per Message annimmt...
MrSm!th is offline  
Old 02/17/2010, 22:07   #25
 
elite*gold: 0
Join Date: Dec 2007
Posts: 81
Received Thanks: 29
wenn man se richtig sendet geht das auch jedenfalls bei mir kp was du da gesendet hast
73rm1n4t0r is offline  
Old 02/17/2010, 22:10   #26


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by 73rm1n4t0r View Post
wenn man se richtig sendet geht das auch jedenfalls bei mir kp was du da gesendet hast
joa gibste mal bitte den source
Ich frage selten nach sowas, das heißt schon was.
Lässt du LPARAM auch bei NULL?
Ich habe alles probiert, NULL, durch MAKEWORD usw. ihn so hinzubiegen, dass an der richtigen Stelle der Scancode ist...
Nix hat geklappt

btw. hast du auch ne Lösung fürs Shiftgedrückthalten?
MrSm!th is offline  
Old 02/17/2010, 22:52   #27
 
elite*gold: 0
Join Date: Dec 2007
Posts: 81
Received Thanks: 29
für Notepad:
Code:
HWND hc=GetDlgItem(FindWindowA("Notepad",0),15);
SendMessage(hc,WM_CHAR,'N',0);
SendMessage(hc,WM_CHAR,'o',0);
SendMessage(hc,WM_CHAR,'t',0);
SendMessage(hc,WM_CHAR,'e',0);
SendMessage(hc,WM_CHAR,'p',0);
SendMessage(hc,WM_CHAR,'a',0);
SendMessage(hc,WM_CHAR,'d',0);
SendMessage(hc,WM_KEYDOWN,VK_RETURN,0);
einfach ans MainWindow senden bringt dir nix du brauchst schon die Editbox
73rm1n4t0r is offline  
Old 02/17/2010, 23:37   #28


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by 73rm1n4t0r View Post
für Notepad:
Code:
HWND hc=GetDlgItem(FindWindowA("Notepad",0),15);
SendMessage(hc,WM_CHAR,'N',0);
SendMessage(hc,WM_CHAR,'o',0);
SendMessage(hc,WM_CHAR,'t',0);
SendMessage(hc,WM_CHAR,'e',0);
SendMessage(hc,WM_CHAR,'p',0);
SendMessage(hc,WM_CHAR,'a',0);
SendMessage(hc,WM_CHAR,'d',0);
SendMessage(hc,WM_KEYDOWN,VK_RETURN,0);
einfach ans MainWindow senden bringt dir nix du brauchst schon die Editbox
oooohhh Editbox
Das wars^^
WM_CHAR nimmst du einfach nur, weil es besser dafür geeignet ist oder?
Es würde auch mit WM_KEYDOWN gehen?!
edit: Ne geht bei mir nur mit WM_CHAR

btw. warum geht das dann so nicht bei GW (sagt Foo; ich habs noch nicht mit nem Game getestet^^)

Ach ja, woher weiß man die ID der Editbox?
edit:
Ok, mit Spy++ findet man sie^^
Aber Spy++ ist ja nur in der Pro Version von VS, wie machen das denn dann unsere netten Express User Freunde wie Foofightah?

p.s. Die Lösung für mein Shift Problem kenne ich immer noch nicht


@Foo:

Code:
SendMessage(hWnd,WM_CHAR,'w',NULL);
Geht übrigens!
Wenn du in den Chat klickst und eine taste drückst, wird sofort w gespammt.
Nur eben nicht beim Laufen.
MrSm!th is offline  
Old 02/18/2010, 14:24   #29
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Wow, so viel gelesen jetz
Ok, also WM_CHAR ist das selbe wie WM_KEYDOWN?
Und warum war mein Code mit SendMessage dann viel länger als Terminators?
Naja, wayne auch^^
Habs mit KEYEVENTF_KEYUP versucht, aber jetzt fängt er nicht mal mehr an zu laufen QQ
PHP Code:
#include <windows.h>
#include <iostream>

int main(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));
    
Sleep(3000);
    
input.ki.dwExtraInfo KEYEVENTF_KEYUP;
    
SendInput(1,&input,sizeof(input));
    return 
0;

Btw: Warum klappt SetForegroundWindow nicht bei mir?
Σternαl. is offline  
Old 02/19/2010, 10:21   #30
 
elite*gold: 0
Join Date: Feb 2010
Posts: 6
Received Thanks: 0
Hier ist der richtige Weg das ganze zu tun:
Code:
public const int WM_KEYDOWN = 0x100;
        public const int WM_KEYUP = 0x101;
        public const int WM_CHAR = 0x102;

[DllImport("User32.dll")]
        public static extern Int32 SendMessage(
            int hWnd,               // handle to destination window

            int Msg,                // message

            int wParam,             // first message parameter

            long lParam);

[DllImport("User32.dll")]
        public static extern int FindWindow(string strClassName,
                                                 string strWindowName);
///
 Int32 iHandle;

public GWControls() 
        {
            iHandle = Win32.FindWindow(null, "Guild Wars");
            
            
        }

public void resign()
            {
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x0000000D, 0x001C0001); //Enter
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x0000000D, 0x001C0001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x0000000D, 0xC01C0001);

                this.Wait(0.1f);
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x0000002F, 0x00350001); //Slash
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x0000002F, 0x00350001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x0000002F, 0xC0350001);

                this.Wait(0.1f);
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x00000052, 0x00130001); //R
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x00000052, 0x00130001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x00000052, 0xC0130001);

                this.Wait(0.1f);
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x00000045, 0x00120001); //E
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x00000045, 0x00120001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x00000045, 0xC0120001);

                this.Wait(0.1f);
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x00000053, 0x001F0001); //S
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x00000053, 0x001F0001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x00000053, 0xC01F0001);

                this.Wait(0.1f);
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x00000049, 0x00170001); //I
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x00000049, 0x00170001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x00000049, 0xC0170001);

                this.Wait(0.1f);
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x00000047, 0x00220001); //G
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x00000047, 0x00220001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x00000047, 0xC0220001);

                this.Wait(0.1f);
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x0000004E, 0x00310001); //N
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x0000004E, 0x00310001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x0000004E, 0xC0310001);

                this.Wait(0.5f);
                Win32.SendMessage(iHandle, Win32.WM_KEYDOWN, 0x0000000D, 0x001C0001); //Enter
                Win32.SendMessage(iHandle, Win32.WM_CHAR, 0x0000000D, 0x001C0001);
                Win32.SendMessage(iHandle, Win32.WM_KEYUP, 0x0000000D, 0xC01C0001);
Die Param sind 100% korrekt. API declarationen sind natürlich in C# und müsstest das für C++ bisschen ändern.
Patlol22 is offline  
Closed Thread

Tags
bot, c++, guildwars, gw


Similar Threads 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 +1. The time now is 04:28.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.