![]() |
Textinhalt eines Objekts einer anderen Anwendung
Ich habe das Handle eines Objekts einer anderen Anwendung. Ich habe auch die Klasse etc, nun möchte ich den Inhalt speichern, wie kann ich das denn?
|
Re: Textinhalt eines Objekts einer anderen Anwendung
Was ist ein "Objekt"? Und was für ein Handle hast du?
|
Re: Textinhalt eines Objekts einer anderen Anwendung
Klassenname: RichEdit20W
Handle: 197968 Parent Handle: 1311452 Das habe ich mit WinSpy ausgelesen. Also es ist in einer anwendung eine "Memo" die TExt anzeigt. Diesen Text möchte ich speichern :D |
Re: Textinhalt eines Objekts einer anderen Anwendung
Sage doch gleich, dass du einen Fenstertext auslesen willst. Dazu gibt es im Forum wahrlich genug. Suche mal nach WM_GETTEXT.
|
Re: Textinhalt eines Objekts einer anderen Anwendung
Ich habe diese Funktion:
Delphi-Quellcode:
Gestern funktionierte Sie tadellos und jetzt nicht mehr. Ich übergebe 100%ig das richtige Handle, winspy sei dank, aber ich weis nicht an was es liegt. Am code habe ich auch nichts verändert
function GarenaRichEditText(Handle1: HWND): AnsiString;
begin SetLength(Result, SendMessage(Handle1, WM_GETTEXTLENGTH, 0, 0)+ 1); SendMessage( Handle1, WM_GETTEXT, Length(Result), cardinal(Result)); end; |
Re: Textinhalt eines Objekts einer anderen Anwendung
hast du mal geprüft was
![]() |
Re: Textinhalt eines Objekts einer anderen Anwendung
Bist du sicher, dass das Handle richtig ist?
Denn der Klassenname vom Garena Hauptfenster ändert sich jeweils. Dein Code zum Suchen des Fensters wird etwa so aussehen (Erzeugt mit WinSpy)
Delphi-Quellcode:
var
wndMain, wndChild: HWND; begin wndMain := FindWindow('Afx:00400000:b:00010011:00000006:031B08B5','Garena 2.3'); if wndMain <> 0 then begin wndChild := FindWindowEx(wndMain, 0, 'AfxMDIFrame80u', nil); wndChild := FindWindowEx(wndChild, 0, '#32770', nil); wndChild := FindWindowEx(wndChild, 0, 'RichEdit20W', nil); if wndMain <> 0 then begin ShowMessage('Window found. Handle: ' + IntToStr(wndChild)); end; end; end; Schreibe einfach mal:
Delphi-Quellcode:
Besser wäre eine EnumWindows Funktion, welche die Fenster auf Klassenname "Afx:" und den Titel auf "Garena " überprüft.
wndMain := FindWindow(nil ,'Garena 2.3');
|
Re: Textinhalt eines Objekts einer anderen Anwendung
So habe rausgefunden an was es liegt.
Ich habe ein Fenster zum senden von nachrichten, und eines in welchem die nachrichten angezeigt werden. Beide haben die gleiche Klasse etc. Nun ich finde immer zuerst das Fenster zum senden der nachrichten, sprich ich muss nun irgendwie weitersuchen sodass ich irgendwann das richtige gefunden habe. |
Re: Textinhalt eines Objekts einer anderen Anwendung
Zitat:
Delphi-Quellcode:
//...
wndChild := FindWindowEx(wndMain, 0, 'AfxMDIFrame80u', nil); wndChild := FindWindowEx(wndChild, 0, '#32770', nil); wndChild := GetDlgItem(wndChild, 162); //... |
Re: Textinhalt eines Objekts einer anderen Anwendung
Soo endlich gelöst, danke für die Hilfe, jedoch neues Problem, wer hätte es gedacht :D
Delphi-Quellcode:
Der Code funktioniert super, jedoch wenn ich Garena neustarte, verändert sich etwas kleines aber feines :D
wndMain := FindWindow('Afx:00400000:b:00010011:00000006:31F703F5','Garena 2.3');
if wndMain <> 0 then begin wndChild := GetDlgItem(wndMain, 59648); wndChild := GetDlgItem(wndChild, 59648); wndChild := GetDlgItem(wndChild, 162); if wndMain <> 0 then begin
Delphi-Quellcode:
Wie kann ich das denn nun umgehen, dass ich nicht immer mit WinSpy arbeiten muss :D
wndMain := FindWindow('Afx:00400000:b:00010011:00000006:00BE03FD','Garena 2.3');
if wndMain <> 0 then begin wndChild := GetDlgItem(wndMain, 59648); wndChild := GetDlgItem(wndChild, 59648); wndChild := GetDlgItem(wndChild, 162); if wndMain <> 0 then begin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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