![]() |
Position einer Progressbar aus fremder Anwendung auslesen
Hallo zusammen!
Ich möchte durch mein Programm die Position einer Progressbar einer anderen Anwendung ausgeben lassen. Beispiel: Ich kopiere Daten mit der normalen Windows-"Kopieren"-Funktion; zu sehen ist der Kopieren-Dialog mit Progressbar und Zusatzinformationen. Wie wir wissen, ist die aktuelle Position der Progressbar in der Eigenschaft Position gespeichert. Darauf möchte ich nun zugreifen. Was ich weiß: Der Klassenname einer solchen Progressbar lautet "msctls_progress32". Ich kann das Handle mittels FindWindowEx etc. finden. ABER: Welche Funktion aber benutze ich zum Auslesen der Position? |
Re: Position einer Progressbar aus fremder Anwendung auslese
das ganze geht mit
Delphi-Quellcode:
bzw.
SendMessage(Handle, PBM_GETPOS, 0, 0)
Delphi-Quellcode:
die constanten sind in der unit commctrl definiert.
SendMessage(Handle, PBM_DELTAPOS, 0, 0)
|
Re: Position einer Progressbar aus fremder Anwendung auslese
Okay. Soweit so gut. Leider erhalte ich als Ausgabe eine sehr verwirrende Zeichenkombination.
Was mache ich falsch?
Code:
function TextUebergeben: string;
var hMemo, hHandleDesFensters : HWND; Text : pchar; len: Integer; begin SetLastError(0); hHandleDesFensters := FindWindow(nil, 'Kopieren...'); if hHandleDesfensters <> 0 then begin hMemo:= FindWindowEx(hHandleDesFensters, 0, 'msctls_progress32', nil); if hMemo <> 0 then begin len := SendMessage(hMemo, PBM_GETPOS, 0, 0); GetMem(Text, len+1); try try SendMessage(hMemo, PBM_GETPOS, len+1, Integer(@Text[0])); result := String(Text); except on E: EOutOfMemory do Messagebox(form1.Handle, PChar(E.Message), 'Fehler', MB_ICONSTOP); end; finally FreeMem(Text, len+1); end; end else Messagebox(form1.Handle, PChar(SysErrorMessage(GetLastError)), 'Fehler', MB_ICONSTOP); end else Messagebox(form1.Handle, PChar(SysErrorMessage(GetLastError)), 'Fehler', MB_ICONSTOP); end; |
Re: Position einer Progressbar aus fremder Anwendung auslese
ich verstehe nicht ganz was du da mit getmem machst. Eigentlich gibt doch SendMessage schon die Position zurück!
|
Re: Position einer Progressbar aus fremder Anwendung auslese
![]() Also ist in der Variable len die Position der Progressbar gespeichert. Wozu ist das andere da? |
Re: Position einer Progressbar aus fremder Anwendung auslese
Klingt jetzt vielleicht etwas dumm, aber welche units/api´s brauche ich für PBM_GETPOS auszulesen ?!
|
Re: Position einer Progressbar aus fremder Anwendung auslese
@VanHelf:
Delphi-Quellcode:
:)
uses ...CommCtrl...
|
Re: Position einer Progressbar aus fremder Anwendung auslese
Is aber irgendwie Quatsch commctrl nur für die eine Nachricht einzubinden :?
Einfach einmal commctrl einbinden, onCreate
Delphi-Quellcode:
den Wert merken, commctrl entfernen und PBM_GETPOS selber definieren :zwinker:
ShowMessage(IntToStr(PBM_GETPOS));
|
Re: Position einer Progressbar aus fremder Anwendung auslese
Vielen dank habe es auch geschafft die position herauszubekommen, nur welchen maximalwert hat die progressbar, da bei mir werte > 100 herauskommen
|
Re: Position einer Progressbar aus fremder Anwendung auslese
Mit PBM_GETRANGE wobei wParam False sein muss, also so:
Delphi-Quellcode:
max := SendMessage(pbhwnd, PBM_GETRANGE, False, 0);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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 by Thomas Breitkreuz