Tastendruck an Fenster senden
-
Guten Tag,
ich hätte 2 Fragen, bezüglich das Senden von Tasten an ein bestimmtes(muss nicht mal sein) Fenster. Bei einem Spiel(Fullscreen) möchte ich mit "T" die Chatbox öffnen, womit der Cursor direkt in der Chatbox ist und ohne weiteres geschrieben werden kann(die Chatbox muss also nicht erst gesucht und ausgewählt werden, es seidenn jemand weiß mit leichten Mitteln wie). Dann soll in diese Chatbox ein Befehl eingegeben werden "/test 1000". D.h. ich möchte an das Fenster die Tasten "/, t, e..." senden und drücken lassen.
Mein Problem hierbei ist also, wie oder womit kann ich das Fenster auswählen und an dieses Tastendrücke senden. Ein Nebenproblem hierbei für mich ist, ich muss die 1000 bis 9999 hochzählen lassen. Wenn ich also eine Schleife habe, muss sie im 1. Durchgang "/test 1000" an das Fenster senden und drücken lassen. Im 2. Durchgang "/test 1001".Wäre es mit C++ schneller? Für die 8999 Schleifen habe ich nämich nur 60Sekunden Zeit.
Ich hoffe mir kann jemand helfen, Code zeigen oder auch nur Stichwörter sagen, nach denen ich googlen muss.
Mit freundlichen Grüßen: FreakY
-
Hallo.
Wieso machst du das ganze mit for Schleifen? Mit Timern ist das ganze doch viel bequemer;)
Nur das mit den 60sec wird sich nicht ausgehen. So weit ich weiß rechnet Windows mit etwa 15 ms. Und wenn du 8999 Zahlen im Abstand von 15ms ausgeben lässt da sind das ca 135sec.(Außerdem wird dein Computer wegen des Spiels sowieso mehr Zeit benötigen, also ist das ganze ziemlich unmöglich
Ich lass dir jetzt trotzdem einen Lösungsvorschlag da:
Du schreibst ein Programm das das ganze macht(wie kommt später). Dieses Programm öffnest du im Hintergrund. Dann gehst du zurück in dein Spiel. Nun suchst du dir eine Taste aus(zB Q) mit der du das Eingeben in die Chatbox beginnst.Und hier mal ein Pseudocode:
[code]private void timer1_Tick(object sender, EventArgs e) { int Zahl = 1000; string Ausgabe = Convert.ToString(Zahl); //Es gibt eine bessere Umwandlung aber die weiß ich grad nicht^^. SendKeys.Send("/Test " + Ausgabe); /*Diese Zeile "drückt" die Tasten /,t,e,s,t, ,1.StelleZahl,2.,3.,4. *Wenn du nun aber auch die Chatbox öffnen willst, dann gehört *über diese Zeile noch eine Zeile wo das T gesendet wird. *Hier etwas über die Sendkeys Methode. */ Zahl++; }[/code]
Es tut mir Leid, aber ich habe die Code-Tags nicht richtig verwenden können.
So diesen Code müsstest du nur noch so bearebietn, dass er bei dir passt.
!!Dieser Code wurde von mir schnell geschrieben und kann Rechtschreibfehler und Syntax_Fehler enthalten!!Von wegen ob C++ schneller ist, dass weiß ich nicht.
Ich hoffe ich konnte dir helfen und habe dich richtig verstanden.
mfg Wandernder Mongole
-
Das klingt gut und vernünftig, danke schonmal. Allerdings weiß ich immer noch nicht wie ich auf das Spiel zugreife, damit ich Tasten an das Spiel senden kann.
Das mit den 135 Sekunden klingt für mich komisch. Ich denke nicht das eine Schleife 15ms benötigt.
-
Okay das Problem hat sich gelöst. Alles was ich wollte hat funktioniert. Danke nochmal. Und das mit den Sekunden war auch kein Thema, da die 8999 Durchgänge nur 5,4 Sekunden gedauert haben. ABER ... Der Server hat einen Antiflood und somit hab ich das nächste Problem und ich denke ich komme jetzt eher zu einer Frage, die viel komplizierter ist, aber vielleicht weiß jemand die Antwort.
Der Server schreibt mir im Chat eine Zahl und zwar die Zahl, die ich mit "/test zahl" eingeben muss. Ich dachte mir nunmal, dass ich einfach den ganzen Zahlenbereich durchgehe, was nun aber nicht mehr funktioniert wegen dem Antiflood. Somit dachte ich mir nun, dass ich vielleicht irgendwie diese Nachricht, die im Chat auftaucht, abfange und zum Senden verwende. Weiß einer wie oder ist es doch viel zu viel Aufwand und Wissen das man benötigt?Mit freundlichen Grüßen : FreakY
-
Sorry ich habe deinen Beitrag erst jetzt gelesen^^Nein das weiß ich leider nicht.
mfg
-
hab jetzt kein lust zu suchen, aber du kannst du bilder suchen lassen also das heißt du machst screenshots von den zahlen 1 - 9, und lässt die alle suchen, danach überprüfst du noch die reihenfolge der zahlen anhand der coordinaten und fertig, das abfangen ist packet sniffing da gehört schon einiges zu also das kannst du vergessen falls du nicht nen crashkurs im hacken machst ^^
-
Ich versteh jetzt nicht so ganz was du meinst. Außerdem, Bis ich die Zahlen, die zufällig erstellt werden, alle als Screenshot hab (8999 Zahlen), gibts den Server wahrscheinlich schon garnicht mehr... Wäre es ein Programm, wäre es nicht mal das Problem Bilder zu machen und die zu vergleichen, aber das ist ein Spiel, d.h. der Hintergrund ist IMMER verschieden, es seidenn ich hab immer die gleiche XYZ Koordinaten und die gleiche Angle.
-
1. ich meinte auch nicht dass du 9000 zahlen screens machen sollst, da das dezimalsystem nur 10 ziffern hat
2. kannst du die zahl nicht markieren?
-
Naja gut, dass mit den Screenshots könnte dann schon funktionieren. Die Koordinaten der Zahlen sind auch immer gleich, aber wie soll ich die mit meinen Bildern vergleichen? Ich wüsste nicht mal welche Klasse ich benutzen sollte...
-
http://www.autohotkey.com/docs/commands/ImageSearch.htm
aber kannst du die wirklich nich markieren einfach und kopieren?
-
Nope geht nicht. Außerdem ist das doch kein C#?...
-
oh sry garnicht drauf geachtet
-
Darf man den namen des Spieles wissen? Dass was du machen möchtest, würde man am leichtesten auf einem "nicht erlaubten" weg schaffen.
http://www.codeproject.com/KB/cpp/codecave.aspx
Ein beispiel für Pinball, mit einem Codecave könntest du die Chat-Nachricht an dein Programm weiterleiten, dass müsste man dann natürlich in C++ erstellen(dll) und dann in dein C# projekt benutzen. Falls du kein ASM kannst, dann wird es wahrscheinlich sehr schwer.