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 Auslesen einer Statusbar eines anderen Programms (https://www.delphipraxis.net/7825-auslesen-einer-statusbar-eines-anderen-programms.html)

phlux 22. Aug 2003 11:46


Auslesen einer Statusbar eines anderen Programms
 
Mahlzeit! :hi:
Ich hab an meinem PC einen Download Clienten, der während ich weg bin Sachen für mich runterlädt, leider hat dieser keine richtigen Statistik Funktionen, er zeigt jedoch an mit wieviel KB/sec er herunterlädt, jedoch nur in einem Feld der Statusbar. Meine Frage nun, wie kann ich mit meinem Prog genau diesen Wert aus dem anderen Prog auslesen??

mfg phluphie :hi:

Memo 22. Aug 2003 11:51

Re: Auslesen einer Statusbar eines anderen Programms
 
http://www.swissdelphicenter.ch/de/showcode.php?id=935

Evt. bringt es dich ein Stück weiter.

kiar 22. Aug 2003 11:51

Re: Auslesen einer Statusbar eines anderen Programms
 
ermittle das handle vom elternfenster mit findwindows und dann mit enumchildfenster das handle der statusbar , dann mit sendmessage um wm_ gettext erhälst du was in der statusbar drin steht.

im dp findest du auf jedenfall was

Chewie 22. Aug 2003 11:51

Re: Auslesen einer Statusbar eines anderen Programms
 
Was du alles mit Statusbars machen kannst, kannst du im PSDK lesen. Schau dazu im Index nach Status Bar Reference

Das Problem hierbei ist: Das alles funktioniert nur im gleichen Adressraum. Unter NT-basierten Systemen kannst aber Speicher im fremnden Prozess reservieren und es von dort aus versuchen.
Geh mal in die OpenSource-Sparte und schau dir mal den Source von LuckieDIPS (oder so ähnllich), da macht er das gleiche mit einem Listview. Schau dir dabbei mal vor allem den Teil des Codes an, in dem VirtualAllocateEx aufgerufen wird.

Luckie 22. Aug 2003 12:18

Re: Auslesen einer Statusbar eines anderen Programms
 
Die Statusbar gehört zu den CommonControls, deswegen kann man nicht so einfach auf sie zugreifen. Bei Edits, etc. werden Messages wie WM_GETTEXT in einen gemeinsamen Adressraum gemappt, um die Kompatibilität zu alten 16-Bit Windows Programmen zu gewährleisten. Da es die CommonControls in dieser Form unter 16-Bit Windows so noch nicht gab, sah Microsoft keinen Sinn darin, diese Funktionalität auch unter 32-Bit Windows zur Verfügung zu stellen.

Zwei Möglichkeiten sehe ich da:
Entweder du machts es wie ich in meinen LuckieDIPS mit VirtualAlloEx und reservierst dir Speicher im fremden Process, schreibst mit WriteRrocessMemory rein und kopierst es mit ReadProcessMemory in einen eigenen Speicherbereich deiner Anwendung. Geht nur unter NT und höher.
Oder du injezier eine DLL in den remote Prozess und arbeitest mit WM_COPYDATA oder MMF's um die daten auszutauschen. Dies Funktioniert auch unter Windows 9x.

Memo 22. Aug 2003 12:32

Re: Auslesen einer Statusbar eines anderen Programms
 
Niemand liest meine Beiträge :cry:

Luckie 22. Aug 2003 12:39

Re: Auslesen einer Statusbar eines anderen Programms
 
Der Source macht genau das, was ich beschrieben habe. Kuck dir mal die Unit CreateProcessMemMgrForWnd aus dem Download an. Ich habe nur beschrieben, warum es nur so geht und eine weitere Möglichkeit aufgezeigt.

Memo 22. Aug 2003 12:43

Re: Auslesen einer Statusbar eines anderen Programms
 
Zitat:

Zitat von Luckie
Der Source macht genau das, was ich beschrieben habe.

Das wollte ich damit auch nur ausdrücken.


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