Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Text aus Drittprogramm auslesen (https://www.delphipraxis.net/57948-text-aus-drittprogramm-auslesen.html)

th_bone 29. Nov 2005 10:32


Text aus Drittprogramm auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

im Anhang habe ich einen Screenshot von WinSpy - dort sehe ich ja den Text "Not Connected" von
einer Drittapplication

wie stellt WinSpy an, diesen Text auszulesen ? die ControlID scheint die Konstante zu
sein, die immer gleich bleibt - aber wie komme an diesen Text ran ?
handle des Fensters etc. ist kein problem

Danke

Ralf

Luckie 29. Nov 2005 10:34

Re: Text aus Drittprogramm auslesen
 
Mit MSDN-Library durchsuchenGetDlgItem kommst du an das Handle eines Child-Fensters, wenn du dessen ID kennst. Der Rest geht wie gehabt mit MSDN-Library durchsuchenWM_GETTEXT.

th_bone 29. Nov 2005 10:38

Re: Text aus Drittprogramm auslesen
 
Wow danke für die schnelle Antwort...

Ralf

th_bone 29. Nov 2005 12:27

Re: Text aus Drittprogramm auslesen
 
Hi,

so wie es aussieht brauche ich noch das parenthandle - wenn ich den wert manuell einsetze
dann funktioniert es - aber wie kann ich ihn automatisch ermitteln :gruebel:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 hwnd, handle, parenthandle: thandle;
 buffer: array[0..1024] of Char;
begin
  hWnd := FindWindow(nil, 'Globalserver - Desktop Edition by Omega Research');
  handle := handlefromid(hwnd,5191);
 
  parenthandle:= {??? wie ermittle ich dieses ?};

  handle:=getdlgitem(parenthandle,5191); // parenthandle, controlid
  sendmessage(handle,WM_gettext,sizeof(buffer),Integer(@buffer));

  label1.Caption:='Status: '+string(buffer);
end;
Danke für die Hilfe

Ralf

Luckie 29. Nov 2005 13:10

Re: Text aus Drittprogramm auslesen
 
Die ID ändert sich ja nicht. Es spricht also nichts dagegen diese hard zu coden. Ansonsten bekommst du das Eltern-Fenster mit MSDN-Library durchsuchenGetParent. Aber das hast du doch schon mit FindWindow gefunden. :gruebel:

th_bone 29. Nov 2005 13:53

Re: Text aus Drittprogramm auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ja Getparent war die Lösung - DANKE - aber das Handle von Findwindow bei jedem neustart komplett anderst (ich hab mal einen screenshot von dem Prog angehängt) - vielleicht liegts ja daran das der
text den ich auslese in einer groupbox ist ?! das einzige was ich als konstante festgestellt
habe war die controlid

Hier nochmal der Code der letztlich zum Ziel führt (falls jemand ein ähnliches Problem hat)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 hwnd, handle, parenthandle: thandle;
 text: dword;
 buffer: array[0..1024] of Char;
begin
  hWnd := FindWindow(nil, 'Globalserver - Desktop Edition by Omega Research');
  handle := handlefromid(hwnd,5191);
  parenthandle:=getparent(handle) ;
  handle:=getdlgitem(parenthandle,5191);    // parenthandle, controlid
  sendmessage(handle,WM_gettext,sizeof(buffer),Integer(@buffer));

  label1.Caption:='Status: '+string(buffer);
end;
Nochmals danke

Tschüss

Ralf

Luckie 29. Nov 2005 16:37

Re: Text aus Drittprogramm auslesen
 
Ich versteghe den Code immer noch nicht. Das das Fensterhandle jedes mal anders ist, ist klar. Aber das ist doch kein Problem, da sich ja offensichtlich der Fenstertitel nicht ändert. Also hast du schon mal das Handle des übergeordneten Fensters. Dann klannst du dir mit getDlgItem doch das Handle des Kindfensters holen. Ich verstehe nicht, warum du das Parent brauchst, wenn du doch schon das Child gefunden hast.

Und was macht handlefromid? Kölingt so, als wenn es genau das selbe wäre wie GetDlgItem. Wenn dem so ist, dann drehst du dich hier:
Delphi-Quellcode:
handle := handlefromid(hwnd,5191);
parenthandle:=getparent(handle) ;
handle:=getdlgitem(parenthandle,5191);
einmal im Kreis: ERrst hilst du dir das handle des Childfensters, dann des Elternfensters und vom Elternfenster wirde das handle des gleichen Kindfensters. Was soll das?

th_bone 30. Nov 2005 12:30

Re: Text aus Drittprogramm auslesen
 
Hi

:wall: :wall: :wall: irgendwan sollte man auch mal Pause machen...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 hwnd, handle, parenthandle: thandle;
 buffer: array[0..1024] of Char;
begin
  hWnd := FindWindow(nil, 'Globalserver - Desktop Edition by Omega Research');
  label1.caption:='FindwindowHandle '+inttostr(hwnd);
  handle := handlefromid(hwnd,5191);
  label2.caption:='HandlefromID '+inttostr(handle);
  sendmessage(handle,WM_gettext,sizeof(buffer),Integer(@buffer));

  label1.Caption:='Status:'+string(buffer);
end;
das reicht natürlich aus...

'HandelfromID' ist eine function die ich hier im Board mal gefunden habe, die anhand der ControlID
den Handle ermittelt

getdlgitem ging aber nicht - keine ahnung was hier der Unterschied zu HandlefromID ist...

Tschüss und nochmals Danke

Ralf


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 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