Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Daten eines Fremden Fensters auslesen (https://www.delphipraxis.net/135035-daten-eines-fremden-fensters-auslesen.html)

michback 3. Jun 2009 15:20


Daten eines Fremden Fensters auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe eine internetseit erstellt auf der die Punkt von Spielen angezeigt werden. Jetzt scheidere ich aber am Auslesen der Daten aus einer Serveranwendung. Es handelt sich hierbei um Civ 4. Das Fenster (siehe Bild) enthält alle Daten welche ich auslesen möchte.

Wieviele Spieler
Die Namen
Der Ping
Und wer dran ist

Ich habe hier im Forum folgenden Quelltext gefunden.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hMain : DWORD;
  hSub : DWORD;
  iLen : integer;
  pText : PChar;

begin
  hMain := FindWindow(NIL,chr(039)+'meineeiner'+chr(039)+' successfully saved'+chr(034));

  if hMain = 0 then begin
    ShowMessage('Meldung nicht gefunden'#13#10+
                 SysErrorMessage(GetLastError));
    Exit;
  end;
  hSub := FindWindowEx(hMain,0,'EDIT',nil);
  if hMain = 0 then begin
    ShowMessage('Inhalt nicht gefunden'#13#10+
                 SysErrorMessage(GetLastError));
    Exit;
  end;
  iLen := SendMessage(hSub,WM_GETTEXTLENGTH,0,0)+1;
  if iLen = 0 then begin
    ShowMessage('Kein Inhalt');
    Exit;
  end;
  pText := AllocMem(iLen);
  try
    if SendMessage(hSub,WM_GETTEXT,wParam(iLen),lParam(pText)) = 0 then begin
      ShowMessage('0 Zeichen kopiert');
    end else begin
      ShowMessage(pText);
    end;
  finally
    FreeMem(pText,iLen);
  end;
end;
Nachdem ichin diese Beitrag hingewiesen Wurde das ich für mein anliegen einen neuen Beitrag auf machen solle tue ich dies hiermit.

Die Procedure gibt nur die Meldung aus "0 Zeichen" gefunden. Ich denke es liegt daran das es keine Texte in memoboxen sind.
Die Chat dialoge kann ich auslesen.


Wie könnte ich denoch an die Daten kommen?


Delphi-Quellcode:
hSub := FindWindowEx(hMain,0,'EDIT',nil);

Ich weis das ich das EDIT durch z.B. Button ersetzen muss aber ich weis nicht was für eine Form die Liste hat. Und wo ich eine übersicht finde wsa man alles eingeben kann.

PS: Ich habe bereits schon versuch die RAM Adressen mit einem Hexeditor auszulesen konnte jedoch nur die Punktzahl finden alle anderen Daten sind nicht zu finden.

toms 3. Jun 2009 17:23

Re: Daten eines Fremden Fensters auslesen
 
Hallo

Lade meinen WinSpy runter und analysiere damit die Objecte und lass dir den FindWindow-Code automatisch erzeugen.

jaenicke 3. Jun 2009 17:45

Re: Daten eines Fremden Fensters auslesen
 
Damit wird das ja vermutlich schon erledigt sein, aber der Vollständigkeit halber der nicht angegebene Crosspost:
http://forum.delphi-treff.de/showthread.php?t=26728

michback 3. Jun 2009 19:41

Re: Daten eines Fremden Fensters auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Leider habe ich es nocht nicht ganz gelöst.

Ich schaffe es jetzt mit hilfe von Winspy und desse generierten code den Handle des Fensters zu ermiteln. Auch weis ich jetzt das die objekte "Static" und "Button" sind.

Die Handle änderen sich logischer weise bei jedem starten des Programmes. Und unter den Objekten gibt es für mich auch keinen Mathematischen zusammenhang. (Habe dies mehrfach überprüft, die Verhältnisse der einzelen Handles zu einander änderen sich leider auch. Anbei ein Bild von Winspy mit einer Beispielsauslesung.

Das Problem ich möchte ja den inhalt zum Beispiel des ersten Buttons auslesen. Wie sage ich FindWindowEx das es genau diesen Button auslesen soll. Ich finde keine namen oder gleichbleibenden Wert den man Ansprechen kann.

Fragen:

1) Wie kann ich ein bestimmtes Objekt auslesen ?

jaenicke 3. Jun 2009 19:44

Re: Daten eines Fremden Fensters auslesen
 
Sollten die Fensternamen nicht konstant sein, gibt es natürlich Probleme. Die Handles sind sowieso jedesmal anders, aber die werden ja mit FindWindow gesucht.

Dafür sollte WinSpy eigentlich auch den entsprechenden Delphicode generieren um ein spezielles Fenster / Control zu suchen in Delphi.

michback 3. Jun 2009 19:51

Re: Daten eines Fremden Fensters auslesen
 
Die ermittlung des Fensternamens habe ich bereits gelöst. Dieser ist Dynamisch wird aber ausgelesen.


Leider geht das erzeugen des Quellcodes bei mir nur bei dem Haupfenster. So lese ich ja die Handle des Fensters aus.
Das Problem ist das die Objekte wie Button und Static beim Codegenerieren nur zu einer Fehlermeldung (siehe Bild führen)

Ich könnte ja auch über eine Schleife alle Button auslesen und dann auswerten aber. Der Befehl liest immer nur den ersten den er findet aus.


Delphi-Quellcode:
hSub := FindWindowEx(hMain,0,'EDIT',nil);
FindWindowEx(Der Handle des Fensters, ???,Art des Objektes, ???);

Was stelle ich an den stellen mit ??? finde keine Angaben. Die Delphi Hilfe kennt den Befehl nicht.

jaenicke 3. Jun 2009 19:55

Re: Daten eines Fremden Fensters auslesen
 
Zitat:

Zitat von michback
Die Delphi Hilfe kennt den Befehl nicht.

Es handelt sich ja auch um einen API-Befehl:
http://lmgtfy.com/?q=FindWindowEx
http://msdn.microsoft.com/en-us/library/ms633500.aspx

Der zweite Parameter gibt an, dass ab einem bestimmten (bereits gefundenen) Kindfenster weitergesucht werden soll. Also so ähnlich wie bei PosEx. Und der letzte Parameter ist der Titel des Fensters.

michback 3. Jun 2009 20:02

Re: Daten eines Fremden Fensters auslesen
 
Zitat:

Zitat von jaenicke
Zitat:

Zitat von michback
Die Delphi Hilfe kennt den Befehl nicht.

Es handelt sich ja auch um einen API-Befehl:
http://lmgtfy.com/?q=FindWindowEx
http://msdn.microsoft.com/en-us/library/ms633500.aspx

Der zweite Parameter gibt an, dass ab einem bestimmten (bereits gefundenen) Kindfenster weitergesucht werden soll. Also so ähnlich wie bei PosEx. Und der letzte Parameter ist der Titel des Fensters.


also keiner der Beiden beschreibt welches z.B. "Edit" er auslesen soll. Aber er muss doch von irgenwo bekommen welches Edit er lesen soll.

Ok danke erst mal, da werde ich mich doch erst noch etwas belesen müssen. Ist doch schwieriger als ich es mir gedacht hatte.

jaenicke 3. Jun 2009 20:28

Re: Daten eines Fremden Fensters auslesen
 
Da die keinen Titel oder so haben, musst du mit Hilfe des zweiten Parameters noch einmal weitersuchen, wenn du das erste gefunden hast z.B., denn die Reihenfolge bleibt gleich.

michback 4. Jun 2009 05:18

Re: Daten eines Fremden Fensters auslesen
 
Zitat:

Zitat von jaenicke
Da die keinen Titel oder so haben, musst du mit Hilfe des zweiten Parameters noch einmal weitersuchen, wenn du das erste gefunden hast z.B., denn die Reihenfolge bleibt gleich.

Das ist ja das Problem. Ich kann nicht weitersuchen. Ich hatte hier im Forum einen Betrag gefunden in dem das Problem gelöst war. leider finde ich ihn nicht mehr. Titel war ca. "mehrere Panel auslesen"


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Seite 1 von 2  1 2      

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