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
Laut msdn muss der l- sowie der wParam der Message immer 0 sein und zurück bekommt man, wie mein vorschreiber schon sagte, ja die Position der Progressbar gleich von der Message.
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 22:22 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