![]() |
Sourcecode: Progressbars über ControlID von ext. App finden
Liste der Anhänge anzeigen (Anzahl: 1)
![]() Ich wollte den Status von zwei Progressbars eines externen Programms auf zwei Progressbar in meinem eigenen Programm übertragen. Nach langen hin und her hab ich nun endlich die Lösung gefunden. Da ich sie Euch nicht verenthalten will, könnt Ihr sie für Eure Programme verwenden. Bitte schreibt bei Euren Credits meinen Nic und den von Assarbad da ichs ohne seinem FindAll-Programms nie geschafft hätte. |
Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
Zitat:
Bye |
Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
Liste der Anhänge anzeigen (Anzahl: 1)
![]() Ich hab mal schnell ein Programm gecoded. Was mir aufgefallen ist: Anscheinend wird die untere Progressbar übertragen. Das hab ich auch mit dem VB-Programm erlebt. Auch in meinem Beispiel sind die Namen der Progressbars identisch. Sie lauten TProgressBar.
Delphi-Quellcode:
Wie kann man nun die Progressbars definieren?
var
wnd: HWND; begin wnd := FindWindowbyTitle('ProgressTEST'); wnd := FindWindowEx(wnd, 0, 'TProgressBar', nil); if wnd <> 0 then begin end; end; |
Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
Mit folgendem Code hab ichs zumindest mit dem Delphiprogramm geschafft:
Delphi-Quellcode:
Nur einmal, da sich die Werte für wnd := GetDlgItem(wnd, 11731874); ändern ...
var
wnd: HWND; begin wnd := FindWindowbytitle('ProgressTEST'); //wnd := FindWindowEx(wnd, 0, 'TProgressBar', nil); wnd := GetDlgItem(wnd, 11731874); if wnd <> 0 then begin progressbar1.position:=SendMessage(wnd, PBM_GETPOS, 0, 0); progressbar1.max:=SendMessage(wnd, PBM_GETRANGE, 0, 0); end; wnd := FindWindowbytitle('ProgressTEST'); //wnd := FindWindowEx(wnd, 0, 'TProgressBar', nil); wnd := GetDlgItem(wnd, 7668440); if wnd <> 0 then begin progressbar2.position:=SendMessage(wnd, PBM_GETPOS, 0, 0); progressbar2.max:=SendMessage(wnd, PBM_GETRANGE, 0, 0); end; end; Wie kann man die ControlID bekommen? |
Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
TProgressBar ist nicht der Name, sondern der Klassenname
HWND FindWindowEx( HWND hwndParent, // handle to parent window HWND hwndChildAfter, // handle to a child window LPCTSTR lpszClass, // pointer to class name LPCTSTR lpszWindow // pointer to window name ); Du suchst damit immer ein Control in einem Fenster... Wenn du natürlich 2 hast, bekommst du trotzdem nur eins, welches das ist, ka... Du must irgendwie das nächste auslesen, wie das genau geht, kann ich dir aber nicht sagen... Aber hier im Forum gab es mal Code zu einm Tool mitdem man die Namen und Eigenschaften von Controls eines belibigen Programms auslesen konnte, vielleicht findest du das, das könnte dir sicher helfen... Bye |
Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
|
Re: ControlID einer Progressbar finden. Wie? (Ext. App)
Mit Win-Xspy arbeite ich ja schon.
![]() Ich komm bis zum Klassennamen. Wie kann ich nun die ControlID der Progressbar ermitteln?
Delphi-Quellcode:
Ich hab mal den Titel geändert ... :D
procedure TForm1.Timer1Timer(Sender: TObject);
var wnd: HWND; ID1,ID2:Integer; begin wnd := FindWindowbytitle('ProgressTEST'); wnd := FindWindowEx(wnd, 0, 'TProgressBar', nil); ID1:= GetDlgCtrlID(wnd); wnd := GetDlgItem(wnd, ID1); if wnd <> 0 then begin progressbar1.position:=SendMessage(wnd, PBM_GETPOS, 0, 0); progressbar1.max:=SendMessage(wnd, PBM_GETRANGE, 0, 0); end; wnd := FindWindowbytitle('ProgressTEST'); wnd := FindWindowEx(wnd, 0, 'TProgressBar', nil); ID2:= GetDlgCtrlID(wnd); wnd := GetDlgItem(wnd, ID2); if wnd <> 0 then begin progressbar2.position:=SendMessage(wnd, PBM_GETPOS, 0, 0); progressbar2.max:=SendMessage(wnd, PBM_GETRANGE, 0, 0); end; caption:=('GetProgress - ID1: '+inttostr(ID1)+' | ID2: '+inttostr(ID2)); end; |
Re: ControlID einer Progressbar finden. Wie? (Ext. App)
![]() Die ID von der Klasse der Progressbar1 ist die der zweiten Progressbar und andersherum. Nur klappt mein Code nicht:
Delphi-Quellcode:
... man müsste alle IDs von den Progressbar-Klassen auslesen und zuordnen ...
var
wnd: HWND; ID1,ID2:Integer; begin {get IDs} wnd := FindWindowbytitle('ProgressTEST'); wnd := FindWindowEx(wnd, 0, 'TProgressBar', nil); ID2:= GetDlgCtrlID(wnd); wnd := FindWindowbytitle('ProgressTEST'); wnd := FindWindowEx(wnd, 0, 'TProgressBar', nil); ID1:= GetDlgCtrlID(wnd); {get Progressbar information} wnd := FindWindowbytitle('ProgressTEST'); wnd := GetDlgItem(wnd, ID1); if wnd <> 0 then begin progressbar1.position:=SendMessage(wnd, PBM_GETPOS, 0, 0); progressbar1.max:=SendMessage(wnd, PBM_GETRANGE, 0, 0); end; wnd := FindWindowbytitle('ProgressTEST'); wnd := GetDlgItem(wnd, ID2); if wnd <> 0 then begin progressbar2.position:=SendMessage(wnd, PBM_GETPOS, 0, 0); progressbar2.max:=SendMessage(wnd, PBM_GETRANGE, 0, 0); end; caption:=('GetProgress - ID1: '+inttostr(ID1)+' | ID2: '+inttostr(ID2)); end; |
Re: Sourcecode: Progressbars über ControlID von ext. App fin
Ich hab nun die Lösung gefunden. Kann ein Mod diesen Beitrag zu OpenSource verschieben? Danke.
|
Re: Sourcecode: Progressbars über ControlID von ext. App fin
Öhm, besser wäre es, du hättest dort gepostet und nicht deinen ersten Beitrag editiert. Jetzt ergibt der ganze Thread kein Sinn mehr ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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