AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Daten eines Fremden Fensters auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Daten eines Fremden Fensters auslesen

Ein Thema von michback · begonnen am 3. Jun 2009 · letzter Beitrag vom 4. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#1

Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 16:20
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?


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.
Miniaturansicht angehängter Grafiken
fenster_197.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 18:23
Hallo

Lade meinen WinSpy runter und analysiere damit die Objecte und lass dir den FindWindow-Code automatisch erzeugen.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 18:45
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
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#4

Re: Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 20:41
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 ?
Miniaturansicht angehängter Grafiken
fenster2_864.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 20:44
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#6

Re: Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 20:51
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.


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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 20:55
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#8

Re: Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 21:02
Zitat von jaenicke:
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Daten eines Fremden Fensters auslesen

  Alt 3. Jun 2009, 21:28
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#10

Re: Daten eines Fremden Fensters auslesen

  Alt 4. Jun 2009, 06:18
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"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:32 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