![]() |
Text an Eingabezeile schicken
Hallo Leute,
also ich hab ein bisschen gestöbert, aber nix Passendes gefunden. Mein Problem sieht so aus, dass ich einen (vordefinierten) Text an ein Spiel (sehr alt) schicken will. Wie ich gelesen habe, geht das mit SETTEXT oder so, aber ich weiß schonmal gar nicht, wie ich das handle dieser Eingabezeile herausbekomme, konnte dazu auch nichts Sinnvolles im Forum finden (kenne mich da kaum aus). Was ich gefunden habe, war die Funktion "FindWindow", aber dazu konnte ich in der Delphi-Hilfe nichts finden und auch hier im Forum nicht. In dieser Beziehung hab ich kaum Ahnung, also nicht hauen :zwinker: Liebe Grüße ... |
Re: Text an Eingabezeile schicken
FindWindow(nil,'Titel der oben im fenster drinsteht');
mach ich auch grad was mit... :wink: wie du die eingabezeile dann ansprichst...keine ahnung achso: findwindow gibt ein THandle zurück...also:
Delphi-Quellcode:
danach steht das handle der anwendung bzw des fensters in handle und du kannst damit arbeiten...
handle:THandle;
begin handle:=FindWindow(nil,'xyz'); |
Re: Text an Eingabezeile schicken
Hi,
Mit ![]() ![]() ![]() Das funktioniert aber nur, wenn der Text deines Spiels z.B. ein Static ist. Wird der Text direkt auf die Zeichenfläche des Hauptfensters gezeichnet, kannst du mit ![]() ![]() |
Re: Text an Eingabezeile schicken
Mein Kumpel meint, es sei die erste Variante.
Dazu also: Ich habe mit ![]() Wie ich mit EnumChildWindows umgehen kann, sagt mir die MSDN leider nicht wirklich. Ist das eine Funktion? Als was wird das Ergebnis gespeichert und wie kann ich darauf zugreifen? |
Re: Text an Eingabezeile schicken
Also ich bin echt am Verzweifeln. Hab mir 'ne Stunde lang im iNet und im DP-Forum Beiträge zu EnumChildWindows durchgelesen und bin kaum schlauer geworden. Von rekursivem Aufruf, Pointer und seltsamen functions hab ich was gelesen, aber das war so kompliziert, dass ich überhaupt nichts verstanden hab.
Ich will doch (vorerst) nur herausfinden, wie das handle einer Eingabezeile heißt :wiejetzt: :firejump: |
Re: Text an Eingabezeile schicken
Das geht wirklich einfach mit EnumChildWindows. Der Code könnte z.B. so aussehen:
Delphi-Quellcode:
//Diese funktion wird so lange von EnumChildWindows aufgerufen, bis sie FALSE zurück gibt.
function EnumTargetWindow(WindowHandle: HWND; lParam1: lParam): Boolean; stdcall; var buf: Pchar; dwSize: DWORD; chRect: TRect; begin Result := True; //Alle Fenster werden aufgelistet dwSize := 265; //Speicher für Klassenname reservieren buf := AllocMem(dwSize); //Klassenname des gefundenen Fensters speichern If GetClassName(WindowHandle, buf, dwSize)<>0 then //Wenn das Control ein "Static" ist... If buf='Static' then begin //Dessen Koordinaten in chRect speichern GetWindowRect(WindowHandle, chRect); ///... irgendetwas mit den ausgelesenen Daten tun end; //Allozierten Speicher freigeben FreeMem(buf, dwSize); end; procedure foo; var TargetWnd: HWND; begin TargetWnd := FindWindow('TForm1', nil); If TargetWnd <> 0 then begin EnumChildWindows(TargetWnd, @EnumTargetWindow, lParam(0)); end; end; |
Re: Text an Eingabezeile schicken
Wow, vielen Dank!
Aber er gibt mir diese Fehlermeldung zurück: "@EnumTargetWindow: Variable erforderlich" Da muss aber schon in der Deklaration stehen "From1.EnumTargetWindow(...)", oder? Und müssen nicht bei "FindWindow('TForm1', nil);" die beiden Werte vertauscht sein? |
Re: Text an Eingabezeile schicken
Zitat:
[size=3]PS: Mach in Methoden von TForm1 lieber "Self.Irgendwas" als "Form1.Irgendwas". Das ist wichtig, falls du Instanzen von TForm1 dynmisch erzeugen möchstest oder mal eine Klasse von TForm1 ableitest[/size] Die Reihenfolge bei FindWindow ist absicht. Man sollte eigentlich nicht (nur) nach dem Fenstertitel suchen, sondern falls möglich nach dem Klassennamen. Ist der Klassenname nicht eindeutig, wird's problematisch. Sich auf den Fenstertitel zu verlassen ist ein wenig riskant, da es ein paar Programme gibt, die den Fenstertitel des aktiven Fensters verändern, was dazu führen würde, dass dein Programm es nicht mehr findet :-/ |
Re: Text an Eingabezeile schicken
Das mit dem Pointer und so verstehe ich nicht wirklich, ist aber egal - hauptsache es funktioniert :angel2:
Wie kann ich denn die handles der ChildWindows auflisten lassen (Listbox1)? |
Re: Text an Eingabezeile schicken
Mit IntToStr :mrgreen:
Edit: Ist es normal, dass da ein Leerzeichen bei der Quelltext-Einrückung verschluckt wird?
Delphi-Quellcode:
function EnumTargetWindow(WindowHandle: HWND; lParam1: lParam): Boolean; stdcall;
begin Result := True; //Alle Fenster werden aufgelistet Form1.Listbox1.Items.Add(IntToStr(WindowHandle)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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