Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 17:56

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

Advertisement



Tastendruck simulieren

Discussion on Tastendruck simulieren within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Sep 2009
Posts: 138
Received Thanks: 14
Tastendruck simulieren

Hi!
Ich möchte endlich mal mit c++ nen bot schreiben und scheitere doch tatsächlich schon am wichtigsten punkt ... das simulieren der tastendrücke ..

Ich weiss dass man es mit keybd_event bzw der neueren funktion SendInput machen kann, das will ich aber nich. Ich will nämlich gleich dass das teil auch im hintergrund arbeiten kann. Sprich Game minimieren und bot funzt trotzdem.
Also nehm ich PostMessage. Is doch richtig oder? Wenn nich haut mir gleich aufn deckel xD

Wenn doch dann kommt jetz der hammer .. mein code =P

Code:
void KeySend(BYTE KEY, DWORD DELAY)
{
	UINT scan;
	LPARAM lparam;
	
	scan = MapVirtualKey( KEY, 0 );
	lparam = 0x00000001 | (LPARAM)( scan << 16 );
	PostMessage(hTar.hWnd, WM_KEYDOWN, KEY, lparam);

	Sleep(DELAY);

	scan = MapVirtualKey( KEY, 0 );
	lparam = 0xC0000001 | (LPARAM)( scan << 16);
	PostMessage(hTar.hWnd, WM_KEYUP, KEY, lparam);
}
Das hab ich mir durch gefühlte 1000 stunden googlen, foren durchlesen und MSDN studieren zusammengereimt und der Compiler sacht au nix. (Btw ich benutze MS Visual Studio 2008)

das hTar.hWnd ist aus einer meiner klassen die von einer funktion gefüllt wird die fensterhandle, prozess id usw. alles ausliest.

Naja wenn ich die Funktion nun aber aufrufe in etwa so:
Code:
KeySend(0x42,10);
Sacht der compiler zwar immernoch nichts, das prog läuft auch super durch aber gesendet wird die Taste A trotzdem nich. Also .. keine ahnung ob sie gesendet wird auf jeden fall kommt sie im Editor nich an, den benutz ich nämlich um das zu testen ^^


Kann mir jmd auf die sprünge helfen?? weiss nichmehr weiter <.<
Danke im voraus
lg
Neyoel is offline  
Old 12/22/2009, 02:52   #2
 
Emoemo's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 194
Received Thanks: 46
Focus nochmal gesetzt ?
Emoemo is offline  
Old 12/22/2009, 09:42   #3
 
elite*gold: 0
Join Date: Sep 2009
Posts: 138
Received Thanks: 14
Nein, das würde einiges erklären... wenn es denn funktionieren würde Oo
Also der aufruf sieht im moment so aus:
Code:
if (!SetFocus(Target.hWnd)){
	printf("SetFocus gescheitert!\n");
} else {
	SendKey(0x42,10);
	printf("Key gesendet!\n");
}
Bei der methode kommt als ausgabe immer "SetFocus gescheitert!"

ich habs auch anders probiert:
Code:
HWND hFoc = SetFocus(Target.hWnd);
if (hFoc == NULL){
	printf("SetFocus gescheitert!\n");
} else {
	SendKey(0x42,10);
	printf("Key gesendet!\n");
}
if (hFoc == NULL) weil SetFocus NULL returned wenn sie scheitert.. naja auch da kommt als ausgabe immer "SetFocus gescheitert!" Naja nun bin ich schonwieder ratlos wieso weil das handle kann nicht falsch sein, damit hab ich mir die PID auslesen lassen und die stimmt laut Process Hacker & Process revealer =/
Neyoel is offline  
Old 12/22/2009, 11:09   #4


 
Cholik's Avatar
 
elite*gold: 4
Join Date: Aug 2008
Posts: 6,786
Received Thanks: 4,992
Evtl ;o


Quote:
If the hWnd parameter is invalid or the window is not attached to the calling thread's message queue, the return value is NULL. To get extended error information, call GetLastError.
Cholik is offline  
Old 12/22/2009, 11:20   #5
 
elite*gold: 0
Join Date: Sep 2009
Posts: 138
Received Thanks: 14
Ja schön den eintrag in der MSDN kenn ich und hab ich auch schon offen, und? was soll mir dein post nun sagen Walter?

"Evtl ;o" sagt nicht sehr viel aus, meinst nich? ^^
Neyoel is offline  
Old 12/22/2009, 12:50   #6
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,426
Received Thanks: 1,888
Quote:
Originally Posted by Neyoel View Post
Ja schön den eintrag in der MSDN kenn ich und hab ich auch schon offen, und? was soll mir dein post nun sagen Walter?

"Evtl ;o" sagt nicht sehr viel aus, meinst nich? ^^
Schau dir sein zitat an
MoepMeep is offline  
Old 12/22/2009, 13:06   #7
 
Emoemo's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 194
Received Thanks: 46
Quote:
Originally Posted by Neyoel View Post
Ja schön den eintrag in der MSDN kenn ich und hab ich auch schon offen, und? was soll mir dein post nun sagen Walter?

"Evtl ;o" sagt nicht sehr viel aus, meinst nich? ^^
Ganz ruhig, er hat Dich auf den nächsten Schritt hingewiesen.

Es gibt scheinbar ein Problem mit dem Focus und man weiß nicht woher es kommt. Um mehr Informaltionen über den Fehler zu bekommen kannst Du wie Walter schreibt GetLastError aufrufen.
Emoemo is offline  
Old 12/22/2009, 13:12   #8
 
elite*gold: 0
Join Date: Sep 2009
Posts: 138
Received Thanks: 14
ich bin ganz ruhig.. bin ja froh dass ihr versucht mir zu helfen ^^
Hab nur nich ganz verstanden was Walter mir damit sagen wollte

Also GetLastError .. okay mach ich gleich poste dann was dabei raus kommt ^^
Neyoel is offline  
Old 12/22/2009, 13:47   #9
 
Loraine's Avatar
 
elite*gold: 0
Join Date: Oct 2009
Posts: 25
Received Thanks: 0
hey
es kommt drauf bei welchem game genau (wegen dem miminirten).
normalerweise wenn ein fenster minimiert ist kannst du eigendlich keine tasten simulieren.
naja du kannst schon aber es wird warscheinlich nicht gehn.
versuch doch mal das:

PostMessage(hWnd, WM_KEYDOWN, VkKeyScan('p'), 1);
Sleep(50);
PostMessage(hWnd, WM_KEYUP, VkKeyScan('p'), 0);
Loraine is offline  
Old 12/22/2009, 14:15   #10
 
elite*gold: 0
Join Date: Sep 2009
Posts: 138
Received Thanks: 14
naja zur zeit probiere ich es noch am Windows Editor aus aber selbst da gehts nich xD
Und der hat nichmal nen Anti Cheat Schutz =P (wäre ja auch komisch)
Dass es bei manchen games ncih geht wegen dem anti cheat schutz is klar aber der lässt sich auch ausschalten, in den meissten fällen zumindest ^^

ich probier mal deinen vorschlag mom


Edit:
omfg ... lol
hab grad mit jmd im ICQ drüber geschrieben, der hat das dann bei WoW probiert und bei ihm ging es ...
dann hab ichs bei mir mit winamp probiert .. ging
Dann hab ichs beim Game probiert .. und ratet mal (xD lol) es ging >.<

Nu sitz ich da seid gestern abend dran und war schon am verzweifeln und dann kommt der kerl un sacht "weiss garnich was du willst bei WoW gehts O.o"
lol das is malwieder typisch für mich xD Thread kann geschlossen werden oder so von mir aus auch gelöscht weil der eig nichts bringt xD

Danke trotzdem an alle die versucht haben zu helfen =)
lg Neyoel
Neyoel is offline  
Old 12/22/2009, 14:51   #11
 
Emoemo's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 194
Received Thanks: 46
Quote:
Originally Posted by Neyoel View Post
naja zur zeit probiere ich es noch am Windows Editor aus aber selbst da gehts nich xD
Und der hat nichmal nen Anti Cheat Schutz =P (wäre ja auch komisch)
Dass es bei manchen games ncih geht wegen dem anti cheat schutz is klar aber der lässt sich auch ausschalten, in den meissten fällen zumindest ^^
Du sendest an den Editor und nicht an das Formular. Du musst erst das Parent Window und dann das Child Window (EnumChildWindow) ermitteln.

Quote:
ich probier mal deinen vorschlag mom


Edit:
omfg ... lol
hab grad mit jmd im ICQ drüber geschrieben, der hat das dann bei WoW probiert und bei ihm ging es ...
dann hab ichs bei mir mit winamp probiert .. ging
Dann hab ichs beim Game probiert .. und ratet mal (xD lol) es ging >.<

Nu sitz ich da seid gestern abend dran und war schon am verzweifeln und dann kommt der kerl un sacht "weiss garnich was du willst bei WoW gehts O.o"
lol das is malwieder typisch für mich xD Thread kann geschlossen werden oder so von mir aus auch gelöscht weil der eig nichts bringt xD

Danke trotzdem an alle die versucht haben zu helfen =)
lg Neyoel
Eine Möglichkeit wäre, das sich das Spiel über DirectInput Zugriff zum Treiber geholt hat .

Du könntest in dem Fall DirectInput hooken, Google spuckt da ne Menge aus.


Mit WoW hast Du 100% Recht, da kannst Du einfach Tastaturanschläge übergeben.


Quote:
procedure SendText(key: String);
var W : HWnd;
whandle:string;
begin
whandle:=Form4.Edit7.Text;
W := FindWindow(NIL,PChar(whandle));
//W := FindWindow(NIL,'World of Warcraft'); <-- hier eine alte Zeile für WoW ^^
begin
showmessage('Cannot find:'+ whandle);
status:='0';
ButtonCapture;
end;
if W <> 0 then
begin
PostMessage(W, wm_KeyDown, StrToInt(key),0);
Sleep(50);
PostMessage(W, wm_KeyUp, StrToInt(key) ,0);
end;
end;
Emoemo is offline  
Old 12/22/2009, 15:38   #12
 
elite*gold: 0
Join Date: Sep 2009
Posts: 138
Received Thanks: 14
moahr >.< war ja wieder klar .. da will man das jetz ausführlich am game testen und dann haben die serverwartung xD son scheiss ...

naja fangen wir mal an zu antworten..

Quote:
Originally Posted by Emoemo
Du sendest an den Editor und nicht an das Formular. Du musst erst das Parent Window und dann das Child Window (EnumChildWindow) ermitteln.
Ja is mir dann auch eingefallen als uns das mit WoW aufgefallen is.. hab ich aber garnich dran gedacht, hab mich wohl zu sehr am AutoIT orientiert .. meine FUnktionsaufrufe sollen dem nämlcih ein bisschen ähneln und ja .. hab immer gedacht "bei AutoIT geht das auch, dann wird das doch wohl mit cpp auch gehn *grml*" .. jah aber natürlich nur wenn mans richtig macht xD

Quote:
Originally Posted by Emoemo
Eine Möglichkeit wäre, das sich das Spiel über DirectInput Zugriff zum Treiber geholt hat .

Du könntest in dem Fall DirectInput hooken, Google spuckt da ne Menge aus.
Hm also beim letzten test am game ging es da war noch keine serverwartung (*grml*)
aber allg. gut zu wissen ich schreib auf meine TODO liste ma "DirectInut Hook anschauen" ^^
Man lernt ja nie aus, nich wahr? Wer weiss wann ich das ma gebrauchen kann =P thx!

Im moment brauch ichs aber nich, danke trotzdem.

lg
Neyoel is offline  
Old 12/22/2009, 16:02   #13
 
Emoemo's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 194
Received Thanks: 46
Insgesamt ist das auch für mich eine interessante Thematik.
Ich war/bin am überlegen ob ich eine Library dazu schreibe, bin aber auf:

gestoßen.
Emoemo is offline  
Old 12/22/2009, 16:15   #14
 
elite*gold: 0
Join Date: Sep 2009
Posts: 138
Received Thanks: 14
na da is dir wohl jemand zuvor gekommen =P
hast du das schonmal ausprobiert bei einem game das von z.B. HackShield oder GameGuard geschützt wird, ohne bypass mein ich? Ich mein, ich will nich in frage stellen dass das mal funktioniert hat, aber schau mal aufs datum als das ding gepostet wurde .. das is schon satte 3 Jahre alt.. ich habs nun nich getestet weil ich dazu grad mal garkeine zeit hab aber es könnte aufgrund des alters doch sein dass das von der geläufigsten Anti Cheat Software detected wird??

Wenn nich werd ich mir das auf jeden fall mal genauer anschauen =)
An und für sich is das mit DirectInput aber doch sehr interessant!
Neyoel is offline  
Reply


Similar Threads Similar Threads
Telnet: Brauche Hilfe mit Tastendruck
06/18/2010 - Technical Support - 5 Replies
Hey Leutz, Wie ihr alle wisst ist Telnet ein Fernwartungstool für z.B. Server. Jetzt intressiert's mich ob man damit auch Tastendrücke übermitteln kann dass der Befehl z.B. so aussieht: Send Keyboard "a"(Ähnlich wie in AutoIT mit dem Send Befehl wo an das aktive Fenster eine Tastendruck sendet als Hotkey z.B.) Oder so ähnlich^^Hoffe ihr könnt mir sagen ob das geht oder nicht geht.Wenn ja wie gehts??:confused: MFG GeneratiOon
Tastendruck- simulato erstellen hilfe pls
05/11/2010 - AutoIt - 14 Replies
Hallo Ich wollte mir einen tastendruck simulator erstellen der mir bei einen bestimmten fenster immer die 1 drückt aller 3-5 sekunden..... da ich aber zum ersten mal mit diesen programm arbeite und mein englisch net ganz so gut ist brauch ich da bissel hilfe. bei den durchstöber von andern verschidenen foren habe ich einiges mitnehmen können und hab mal etwas erstellt das schaut so aus While 1
mit c# tastendruck simulieren
02/02/2010 - .NET Languages - 9 Replies
hallo leute, hab ein kleines programm geschrieben welches einen tasendruck simuliert. ich wollte das für metin2 benutzen, umso die fertigkeiten automatisch anzustellen. alle 100 sekunden drückt es zum beispiel die 1. das problem is das die fertigkeit jedoch nicht anspringt, wenn ich jedoch den chat anhabe, schreibt er alle 100 sekunden die 1, weiss jmd warum die fertigkeit nicht anspringt?
Bat soll eine beliebigen Tastendruck simulieren
10/28/2009 - General Coding - 2 Replies
Ja, ich möchte gerne das meine Bat einen Tastendruck simuliert. Sie führt nähmlich ein anderes Prog aus, welches nach jedem mal einen Tastendruck brauch. Da der heini vorm pc aber nich andauernd drücken muss soll es die Bat machen. Nun aber meine frage wie macht man dass? Bin nich so der Bat progger daher die frage an euch! MfG. Thx schonmal



All times are GMT +2. The time now is 17:56.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.