![]() |
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 ;)
|
Re: Sourcecode: Progressbars über ControlID von ext. App fin
@Spider: Für Dein Verständnis: Ich hatte nach einem Code gesucht zwei Progressbars eines VB-Programms auszulesen und in meine GUI zu übertragen. Durch das hin und her was Du im Thread bemerken kannst bin ich auf die Lösung gestoßen.
Damit der Thread wieder einen Sinn ergibt: Der erste Beitrag war ein Frage, wie man am Besten die Progressbar-Position übernehmen kann. Eine Frage war noch, ob man was anfangen kann um auf die Lösung zu kommen ... Zitat:
|
Wieder am Anfang ...
So kanns gehen. Mit dem Delphibeispiel hab ichs zwar geschafft, aber das VB-Programm hat keine ControlID für die Progressbar.
Dafür sind die Handles anders. Nur wie kann ich nun die Progressbar an hand des Handle definieren? ![]() Im Beispiel währe es $002C0DC6 in DelphiHEX |
Re: Sourcecode: Progressbars über ControlID von ext. App fin
Liste der Anhänge anzeigen (Anzahl: 1)
|
Re: Sourcecode: Progressbars über ControlID von ext. App fin
Hi Amnon,
nimms mir nicht übel, aber normal ist es so, dass man den Code bzw. das Programm selbständig in OpenSource nochmal postet und nicht immer hier in den Thread rein. Auch verschieben gibt keinen Sinn, da sonst unnötiges Zeugs im Thread steht. Also, am Besten nochmal in OpenSource posten. Wenn es geht, auch kein 7z-Format, sondern lieber .zip verwenden. MfG, Spider |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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