Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Textinhalt eines Objekts einer anderen Anwendung (https://www.delphipraxis.net/112997-textinhalt-eines-objekts-einer-anderen-anwendung.html)

napsterxx 30. Apr 2008 20:18


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?

Apollonius 30. Apr 2008 20:20

Re: Textinhalt eines Objekts einer anderen Anwendung
 
Was ist ein "Objekt"? Und was für ein Handle hast du?

napsterxx 30. Apr 2008 20:23

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

Apollonius 30. Apr 2008 20:24

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.

napsterxx 1. Mai 2008 08:33

Re: Textinhalt eines Objekts einer anderen Anwendung
 
Ich habe diese Funktion:
Delphi-Quellcode:
function GarenaRichEditText(Handle1: HWND): AnsiString;
begin
  SetLength(Result, SendMessage(Handle1, WM_GETTEXTLENGTH, 0, 0)+ 1);
  SendMessage( Handle1, WM_GETTEXT, Length(Result), cardinal(Result));
end;
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

himitsu 1. Mai 2008 09:16

Re: Textinhalt eines Objekts einer anderen Anwendung
 
hast du mal geprüft was MSDN-Library durchsuchenGetLastError sagt?

toms 1. Mai 2008 09:18

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:
wndMain := FindWindow(nil ,'Garena 2.3');
Besser wäre eine EnumWindows Funktion, welche die Fenster auf Klassenname "Afx:" und den Titel auf "Garena " überprüft.

napsterxx 1. Mai 2008 09:20

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.

toms 1. Mai 2008 09:24

Re: Textinhalt eines Objekts einer anderen Anwendung
 
Zitat:

Zitat von napsterxx
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.

So findest du das richtige RichEdit

Delphi-Quellcode:
    //...
    wndChild := FindWindowEx(wndMain, 0, 'AfxMDIFrame80u', nil);
    wndChild := FindWindowEx(wndChild, 0, '#32770', nil);
    wndChild := GetDlgItem(wndChild, 162);
    //...

napsterxx 1. Mai 2008 10:00

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:
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
Der Code funktioniert super, jedoch wenn ich Garena neustarte, verändert sich etwas kleines aber feines :D

Delphi-Quellcode:
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
Wie kann ich das denn nun umgehen, dass ich nicht immer mit WinSpy arbeiten muss :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Seite 1 von 3  1 23      

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