Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 11:02

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

Advertisement



[C++ - WinAPI] Bot der Metin im Hintergrund steuert

Discussion on [C++ - WinAPI] Bot der Metin im Hintergrund steuert within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2009
Posts: 6
Received Thanks: 1
[C++ - WinAPI] Bot der Metin im Hintergrund steuert

Guten Tag
Zuallererst: Ich hoffe das ist der richtige Bereich in diesem Forum für meine Frage. Zudem: Ich kann C++ (mehr oder weniger) hab allerdings ziemlich wenig Ahnung von dem WinAPI Zeug

Ich möchte nun einen Bot schreiben, der an das Metin Fenster im Hintergrund Nachrichten sendet bzw. Tastatureingaben simuliert. Als Übung soll er einfach mal die Taste 1 drücken. Nun habe ich mir diesen Code aus meinem Gedächtnis zusammengezimmert:
Code:
metin_fenster = FindWindow(NULL,TEXT("METIN2"));
PostMessage(metin_fenster,WM_KEYDOWN,'1',NULL);
Leider schreibt er die 1 nur in das Chatfenster, den Quickslot spricht er nicht an.

Dann habe ich etwas im Internet geforscht und es mit einem etwas anderen Code probiert. Hier mal der ganze Code:
Code:
#include <iostream>
#include <windows.h>

using namespace std;

HWND metin_fenster;

int main()
{
	metin_fenster = FindWindow(NULL,TEXT("METIN2"));
	
	INPUT	f_4 = {INPUT_KEYBOARD, {0x34,NULL,NULL,NULL,NULL}};
	DWORD   dwCurrentProcessId;
	DWORD	dwCurrentThreadId  = GetWindowThreadProcessId(metin_fenster,&dwCurrentProcessId);
	DWORD   dwMyThreadId  = GetCurrentThreadId(); 
	while(true)
	{
		//PostMessage(metin_fenster,WM_KEYDOWN,'1',NULL);
		AttachThreadInput(dwMyThreadId,dwCurrentThreadId,TRUE); 
		SetFocus(metin_fenster);
		SendInput(1,&f_4,sizeof(f_4));
		AttachThreadInput(dwMyThreadId,dwCurrentThreadId,FALSE);
		Sleep(20000);
	}
	return 0;
}
Selbes Ergebnis

Meine amateurhafte Diagnose lautet: Metin holt sich die Tastatureingabe nicht über die Windows-Messages, aber wie denn dann? Via DirectX? OpenGL?

Ich hoffe mir kann von euch jemand helfen
Danke im vorraus

Mfg
Machtl
Machtl is offline  
Thanks
1 User
Old 12/17/2009, 22:03   #2
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Ich vermute mal Metin2 benutzt dafür DirectInput, also müsstest du diese Funktionen dann hooken.
ms​ is offline  
Old 12/31/2009, 16:35   #3
 
elite*gold: 0
Join Date: Dec 2009
Posts: 6
Received Thanks: 1
Guten Tag ich bin es nochmal.

Ich habe mich ein wenig schlau gemacht über DirectInput.
Um den Tastaturstatus auszuwerten muss man eine Methode von Direct Input Device aufrufen und bekommt den Status jeder einzelnen Taste in einem 256x1 Byte großem array serviert. Nun hab ich mir gedacht wenn ich an die Adresse dieses Arrays rankomme kann die Bytes so manipulieren, dass Metin denkt eine Taste wäre gedrückt wurden. also hab ich mal die Cheatengine angeworfen und ein bisschen gestöbert und habe auch etwas gefunden. Wenn ich jetzt aber mittels WriteProcessMemory() unter besagter Adresse 0x80 hinschreibe (Heisst soviel wie: Taste ist gedrückt) sehe ich das in der Cheatengine auch, dass unter dieser Adresse ein neuer Wert ist aber Metin2 zeigt sich davon völlig unbeeindruckt und rührt sich nicht.
Das alles wäre sehr viel hilfreicher, wenn man genau wüsste wie Metin eingaben aufnimmt.
Die Adresse auf die ich den Wert 0x80 geschrieben habe ist übrigens 0x0068C889. Das ist das W, der Char sollte also nach vorn laufen.

Mfg
Machtl
Machtl is offline  
Old 01/01/2010, 12:56   #4
 
^darkwing's Avatar
 
elite*gold: 0
Join Date: Sep 2009
Posts: 148
Received Thanks: 31
Hab auch so meine Probleme mit DirecInput, ähnlich wie bei dir. Ich meine ich habe die richtige Adresse des Arrays gefunden aber dennoch will es nicht funktionieren.

Achja generell gibts zwei Möglichkeiten bei DirectInput:

* Immediate -> GetDeviceState()
* Buffered -> GetDeviceData()

Bei Immediate kannst du einfach als Test mal 0x80 an die entsprechende Stelle schreiben, funktioniert (Also bei mir bei einer Testanwendung).

Buffered sieht schon anderes aus. Da sind es Objekte im Array, du müsstes also selbst ein Objekt anlegen und es an die entsprechende Stelle schreiben. (Funktioniert bei meiner Testanwendung)

Also ich such nach Testanwendungen (Code) und passe ihn meinen Bedürfnissen an und Teste einfach bissl rum.

Deswegen solltest du erstmal herausfinden wie das Spiel seinen Input bekommt -> OllyDbg.

In der DirectX Dokumentation steht das ganze noch ausführlicher.
^darkwing is offline  
Reply


Similar Threads Similar Threads
Winapi funktionen von kal blockiert?
05/17/2010 - Kal Online - 14 Replies
hi all ich beschäftige mich gerade damit einen kleinen bot zu machen. ich benutze die winapi funktionen. das programm funktioniert auch soweit so gut, ausser wenn ich in kal reingehe. ich vermute mal dass kal die winapi funktionen blockt. kann mir jemand sagen wie ich diese blockade umgehen kann? oder an was das liegen könnte? thx
winApi Pbot Hilfe
08/15/2009 - General Coding - 1 Replies
Guten Tag, eigentlich habe ich gehofft, dass ich nicht auf die Hilfe eines Forums angewiesen bin,aber da heftiges googlen letztendlich nichts ausgespuckt hat, habe ich mich entschieden, hier zu schreiben. Also, ich habe ein Problem. Da Memoryhacking mir eben zu langweilig wurde, habe ich mir mal überlegt, was ich so für (m)einen ersten Bot brauche. Ich habe mir folgende Überlegungen gemacht: #1 Er muss die Farben/Pixel suchen (Ich habe beide jeweils Teams sicherheitshalber in Grau...
WIe steuert man eig ein flugzeug
03/12/2009 - WarRock - 5 Replies
wie oben gesagt kann mir das mal pls jemand erklären weil jedes mal wenn ich mich in flugzeug hock endet mein flug entweder im wasser oder am nächsten berg
WinAPI use in C#
06/09/2008 - .NET Languages - 15 Replies
Hi, in Anlehnung an die Topics hier habe ich mich dazu aufgerafft, nen Annotrainer zu schreiben (siehe Attachment). In der Listview werden halt aktive Annoprozesse angezeigt, die man dann anwählen kann um dann mit dem Cheat button Geld zu cheaten. Jedes item in der Listview hat im item.Tag das jeweilige Prozessobject, somit auch die ID. Allerdings komme ich mit den eigentlichen Funktionen OpenProcess, ReadProcessMemory und WirteProcessMemory in C# noch nicht klar. Zwar bekomme ich das...
WinAPI use in C#
05/19/2008 - .NET Languages - 0 Replies
Hi, in Anlehnung an die Topics hier habe ich mich dazu aufgerafft, nen Annotrainer zu schreiben (siehe Attachment). In der Listview werden halt aktive Annoprozesse angezeigt, die man dann anwählen kann um dann mit dem Cheat button Geld zu cheaten. Jedes item in der Listview hat im item.Tag das jeweilige Prozessobject, somit auch die ID. Allerdings komme ich mit den eigentlichen Funktionen OpenProcess, ReadProcessMemory und WirteProcessMemory in C# noch nicht klar. Zwar bekomme ich das...



All times are GMT +1. The time now is 11:02.


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.