AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text an Eingabezeile schicken

Ein Thema von Aike · begonnen am 17. Nov 2004 · letzter Beitrag vom 5. Feb 2005
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#1

Text an Eingabezeile schicken

  Alt 17. Nov 2004, 22:21
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

Liebe Grüße ...
Achim
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#2

Re: Text an Eingabezeile schicken

  Alt 17. Nov 2004, 22:26
FindWindow(nil,'Titel der oben im fenster drinsteht');

mach ich auch grad was mit...

wie du die eingabezeile dann ansprichst...keine ahnung

achso: findwindow gibt ein THandle zurück...also:

Delphi-Quellcode:
handle:THandle;
begin
handle:=FindWindow(nil,'xyz');
danach steht das handle der anwendung bzw des fensters in handle und du kannst damit arbeiten...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Text an Eingabezeile schicken

  Alt 17. Nov 2004, 22:31
Hi,

Mit Bei Google suchenWinforce kannst du den (Klassen-)Namen des gesuchten Controls und dem dazugehörigen Fenster herausfinden. Den mit MSDN-Library durchsuchenFindWindow gefundenen Handle kannst du dann an MSDN-Library durchsuchenEnumChildWindows übergeben und kommst so an den Handle des Controls.

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 MSDN-Library durchsuchenGetDC ein Handle für diese Zeichenfläche erstellen und dann z.B. mit MSDN-Library durchsuchenTextOut einen Text mit der aktuellen Schriftart darauf ausgeben.
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#4

Re: Text an Eingabezeile schicken

  Alt 17. Nov 2004, 23:06
Mein Kumpel meint, es sei die erste Variante.

Dazu also:
Ich habe mit EnumWindows & Co gekapselt alle Fenster auflisten lassen, allerdings zeigt es mir nur das Fenster an und kein zweites Handle für die Eingabezeile oder so. Würde es das überhaupt rausbekommen? Sieht irgendwie nicht so aus. *Grinst* Ist aber 'ne schöne Funktion

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?
Achim
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#5

Re: Text an Eingabezeile schicken

  Alt 18. Nov 2004, 11:20
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
Achim
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Text an Eingabezeile schicken

  Alt 18. Nov 2004, 20:31
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='Staticthen
  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;
Dani H.
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#7

Re: Text an Eingabezeile schicken

  Alt 18. Nov 2004, 22:48
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?
Achim
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Text an Eingabezeile schicken

  Alt 19. Nov 2004, 01:49
Zitat von Aike:
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?
EnumTargetWindow darf keine Methode von TForm1 sein, sondern sollte als globale Funktion der Unit definiert sein. Klassenmethoden haben einen versteckten Parameter (Pointer); ein Zeiger auf die aufrufende Instanz der Klasse (-> Self).

[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 :-/
Dani H.
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#9

Re: Text an Eingabezeile schicken

  Alt 19. Nov 2004, 02:01
Das mit dem Pointer und so verstehe ich nicht wirklich, ist aber egal - hauptsache es funktioniert
Wie kann ich denn die handles der ChildWindows auflisten lassen (Listbox1)?
Achim
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Text an Eingabezeile schicken

  Alt 19. Nov 2004, 02:04
Mit IntToStr

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;
Dani H.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz