![]() |
Tasten senden problem
Liste der Anhänge anzeigen (Anzahl: 1)
Hi !
was bitte ist denn an diesem code falsch ?
Delphi-Quellcode:
er bringt mir immer ne exception (die is nie zu sehen) also der debugger mein ich.
procedure Cheat(myString : String);
var c : Cardinal; i : integer; s : String; begin c:=FindWindow(nil,'GTA: San Andreas'); //Get WindowHandle if c=0 then begin MessageDlg('Sie müssen das Spiel zuerst starten !',mtwarning,[mbOK],0); Exit; end; for i := 1 to Length(mystring) do SendMessage(c, WM_CHAR, Ord(mystring[i]), 0); //send Keys CloseHandle(c); end; procedure TForm1.WMHotKey(var msg: TMessage); begin if (msg.WParam = 1) then Cheat('LXGIWYL'); // you can choose any number ( up to 4000 ) end; und bewirken tuts gar nix :P Findet ihr da nen fehler ? Gruß Assun edit // geemacht. nu bringt er mir Externe Exception XXXX (nen paar zahlen) edit // Wieder geändert. es folgt die gleiche exception :-( kennts sich damit jemand aus? Edit :// habe diesen wahnsinnscode gefunden : ![]() ich habe es aber auch schonmal mit nur 4 Zeilen geschafft. Ich weiss nur nicht mehr wie :wall: // Code wieder geändert und wieder ne wunderschöne exception (anhang) :-( |
Re: Tasten senden problem
Verschieb mal die Compiler-Direktive in deinem Code. Die muss bestimmt an den Anfang des Implemantation-Abschnittes, nciht in die Mitte :roll:
//edit: Welcher Fehler soll denn dort vorkommen? Bitte einmal eine GENAUE FEHLERBESCHREIBUNG machen. |
Re: Tasten senden problem
Der Fehler liegt wohl hier:
Zitat:
|
Re: Tasten senden problem
ich habe den code nochmal verändert, aber ich erhalte immer noch die gleiche Exception.
Kann mir da mal jemand helfen ? THX |
Re: Tasten senden problem
Hallo Assun,
ich weiß das gehört jetzt nicht gut zum Thema, aber trotzdem:
Delphi-Quellcode:
Wie mir scheint, versuchst du einen Trainer für San Andreas zu schreiben. Nur leider sendest du direkt den Cheat (Zeichenkette) an das Spiel. Seit Vice City gibt es aber eine Funktion, die das Cheaten zählt. Und wenn man cheatet, kann man keine 100% mehr erreichen. Wenn man es so macht wie du, steht dann in der Statistik das man gecheatet hat. Bei "richtigen" Spieletrainer greift man direkt auf die Speicheradressen zu und kann somit das Spiel beeinflussen, ohne das das Spiel das merkt. Solltest du Trainer schreiben wollen, empfehle ich dir das Trainer Maker Kit 1.5 (Googlesuche).
if (msg.WParam = 1) then Cheat('LXGIWYL');
|
Re: Tasten senden problem
Hallo Assun,
Zitat:
Eventuell solltest du mal
Delphi-Quellcode:
anstatt
SendMessage(c, WM_CHAR, Ord(mystring[i]), 0); //send Keys
Delphi-Quellcode:
verwenden, vielleicht hilft das ja.
SendMessage(c, WM_CHAR, Word(mystring[i]), 0); //send Keys
Greetz alcaeus |
Re: Tasten senden problem
Liste der Anhänge anzeigen (Anzahl: 1)
das ist mir auch schon aufgefallen. ich habe ja auch schon so memoryhack trainer für NFSU II geschrieben.
Doch warum alles mühsam suchen (Speicheradressen), wenn ich doch einfach cheats eingeben lasse ? :mrgreen: aber ich werde es wenn ich mal endlich das mit sendkey kapiert hab eh alles eingeben lassen und dann einfach mit nur einem einzigen memoryhack die Zahl wie oft gecheatet wurde einfrieren lassen ^^ Edit // hab den code wieder so verändert wie Alcaeus es mir geraten hat. wieder ne exception :wall: Edit :// falls man es auf dem screenie net erkennen sollte : er hat nen probmel in der Linie wo ich versuch die tasten zu senden |
Re: Tasten senden problem
Zitat:
Außerdem ist San Andreas das beste Spiel des Jahres 2005, und das sollte man ohne Cheats genießen... ;) |
Re: Tasten senden problem
naja aber ich mach das ja auch net um des cheatens willen sondern um des Lernens willen ;-)
weiss keiner eine Antwort? |
Re: Tasten senden problem
Zitat:
Hast du schon mal versucht, mit dem Code einen String an ein anderes Fenster zu schicken? Funktioniert das? Greetz alcaeus |
Re: Tasten senden problem
ich hab doch weiter oben nen screenshot mit der exception angehängt.
|
Re: Tasten senden problem
super, da steht, das dein Programm ne Macke hat. Und? WO?
In welcher Zeile? Bei welchem Statement? :spin: Los! Verrate es uns! Sofort! :roteyes: |
Re: Tasten senden problem
hab euch doch nen Bild mit dem error + Zeile im Anhang !!
|
Re: Tasten senden problem
Da einige den Screenshot zu übersehen scheinen schreib ich es euch nochmals auf:
Zitat:
ich brauch eure hilfe wirklich ;-) |
Re: Tasten senden problem
:gruebel:
Delphi-Quellcode:
Muss das nicht so heissen ?
FindWindow(nil,'GTA: San Andreas');
Delphi-Quellcode:
FindWindow('GTA: San Andreas', nil);
|
Re: Tasten senden problem
Ich habe einen schwarzen Block genau da, wo die Zeilen sind...
Versuche es mit Fehlereingrenzung: 1. Schicke die Zeichen an ein anderes Programm, z.B. ein eigenes (1x Form, 1xEditfeld, fokusiert) 2. Schicke nur ein Zeichen. 3. Stimmt das Handle? ... Danach sehen wir weiter. @turboPascal: Du scheinst (3) schon beantwortet zu haben :zwinker: |
Re: Tasten senden problem
so. habe meinen Code mal etwas umgeschrieben.
Delphi-Quellcode:
keine Fehler, keine abgesstürtzen progs mehr. aber funtkionieren tuts au net :-(
procedure TForm1.Button1Click(Sender: TObject);
var hOE: hWnd; s : string; i : integer; begin hOE:=FindWindow(nil,'Unbenannt - Editor');//Finde das Fenster mit Notepad if hOE = 0 then ShowMessage('Nix gefunden'); s := 'test'; for i := 1 to Length(s) do SendMessage(hOE, WM_CHAR, Word(s[i]), 0); //send Keys end; |
Re: Tasten senden problem
Ein Beispiel um Text ins Notepat einzufügen über SendMessage, FindWindow, FindWindowEx
Delphi-Quellcode:
also sollte es auch so eine Reihe von Chars an dein Prg. senden
procedure TForm1.ButtonXClick...
const mystring: string = 'DerSuperduperBlaBlaTextStringdenmaneinfuegenwill oder so :-)'; var wh: HWND; i: Integer; begin wh := FindWindow('Notepad', nil); //Notepad window finden if wh <> 0 then begin wh := FindWindowEx(wh, 0, 'Edit', nil); // das edit feld im Notepad for i := 1 to length(mystring) do begin // Word() oder Ord() - Hauptsache aus z.B. 'A' wird 65 :-) SendMessage(wh, WM_CHAR, Word(mystring[i]), 0); end; end else ShowMessage('Sorry, Window not found, start the Notepad pleace ?'); end; (wenn das Windowhandle bzw. Fenster/Programmname stimmt):
Delphi-Quellcode:
procedure ...
const mystring: string = 'DerSuperduperBlaBlaCheat'; var wh: HWND; i: Integer; begin wh := FindWindow('GTA: ...', nil); // Window finden Windows.SetFocus(wh); // Focus auf das empfangende Prg. damit es auch Keys verarbeitet ? if wh <> 0 then begin for i := 1 to length(mystring) do begin // Word() oder Ord() - Hauptsache aus z.B. 'A' wird 65 :-) SendMessage(wh, WM_CHAR, Word(mystring[i]), 0); end; Windows.SetFocus(Handle); // Focus auf dein Prg. end else ShowMessage('Sorry, Window not found, start the Notepad pleace ?'); end; |
Re: Tasten senden problem
Ersterer Code funktioniert. letzerer aber nicht !
genau das ist mein Problem, denn ich habe bei GTA ja kein Editfeld ^^ |
Re: Tasten senden problem
:gruebel: Wenn das Windowshandle/Fenstername stimmt?
Du solltest es einmal so Versuchen:
Delphi-Quellcode:
also einen "echten" Testendruck simulieren (k.A. wie GTA die Tasten Events ausliest).
// an Stelle von
SendMessage(wh, WM_CHAR, Word(mystring[i]), 0); //das: SendMessage(wh, WM_KEYDOWN, Word(mystring[i]), 0); SendMessage(wh, WM_KEYUP, Word(mystring[i]), 0); |
Re: Tasten senden problem
also mit folgendem code schreibt er mir er findet GTA: San Andreas nicht !
Delphi-Quellcode:
obwohl in der TaskBar unten "GTA: San Andreas" steht. also heisst das window auch so oder ??
procedure TForm1.Timer1Timer(Sender: TObject);
const mystring: string = 'LXGIWYL'; var wh: HWND; i: Integer; begin wh := FindWindow('GTA: San Andreas', nil); // Window finden Windows.SetFocus(wh); // Focus auf das empfangende Prg. damit es auch Keys verarbeitet ? if wh <> 0 then begin for i := 1 to length(mystring) do begin // Word() oder Ord() - Hauptsache aus z.B. 'A' wird 65 :-) SendMessage(wh, WM_CHAR, Word(mystring[i]), 0); end; Windows.SetFocus(Handle); // Focus auf dein Prg. end else ShowMessage('Sorry, Window not found, start the Notepad pleace ?'); end; |
Re: Tasten senden problem
Zitat:
Im Taskmanager mal gucken nach was dort als Name angeg. ist. (bitte keine Frage(n) zum Taskmanager, bei mir nicht in Benutzung, ich verwende den ![]() |
Re: Tasten senden problem
der Name stimmt. ich bekomm nun auch keine errors mehr und er sagt mir net er hätte nix gefunden.
funtkioniern tuts trotzdem nicht. |
Re: Tasten senden problem
Zitat:
|
Re: Tasten senden problem
naja also ich weiss ja dass man normal alles mit Hex Codes macht.
aber so mit dieser methode gings bei Vice City ! |
Re: Tasten senden problem
Zitat:
Code:
HWND FindWindow(
LPCTSTR lpClassName, LPCTSTR lpWindowName ); |
Re: Tasten senden problem
Es scheint daran zu liegen, dass es dem Spiel nicht genügt das ganze Wort zu "bekommen".
Vielmehr müsste ich jeden einzelnen Tastendruck simulieren. Also Buchstabe für Buchstabe. Und das ist mir definitiv zu viel Arbeit ;-) Vielen Dank an alle Helfer ! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz