Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sourcecode: Progressbars über ControlID von ext. App finden (https://www.delphipraxis.net/68094-sourcecode-progressbars-ueber-controlid-von-ext-app-finden.html)

Amnon82 24. Apr 2006 16:03


Sourcecode: Progressbars über ControlID von ext. App finden
 
Liste der Anhänge anzeigen (Anzahl: 1)
http://img74.imageshack.us/img74/3289/getprog1tb.png

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.

Kedariodakon 24. Apr 2006 16:13

Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
 
Zitat:

Zitat von Amnon82
Kann man auf die COMCTL32.OCX zugreifen? Es könnten ja dort die Informationen, die ich brauche, liegen ...

Weniger, in ihm sind nur die Steuerelemente selbst definiert, mehr nicht...

Bye

Amnon82 24. Apr 2006 16:41

Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
 
Liste der Anhänge anzeigen (Anzahl: 1)
http://img61.imageshack.us/img61/243...rogress8bh.png

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:
var
  wnd: HWND;
begin
  wnd := FindWindowbyTitle('ProgressTEST');
  wnd := FindWindowEx(wnd, 0, 'TProgressBar', nil);

  if wnd <> 0 then
  begin

  end;
end;
Wie kann man nun die Progressbars definieren?

Amnon82 24. Apr 2006 16:47

Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
 
Mit folgendem Code hab ichs zumindest mit dem Delphiprogramm geschafft:

Delphi-Quellcode:
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;
Nur einmal, da sich die Werte für wnd := GetDlgItem(wnd, 11731874); ändern ...
Wie kann man die ControlID bekommen?

Kedariodakon 24. Apr 2006 16:56

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

Mackhack 24. Apr 2006 16:59

Re: VB-Progressbar auf eigenes Programm übertragen(COMCTL32.
 
Guckst du hier

Amnon82 24. Apr 2006 17:15

Re: ControlID einer Progressbar finden. Wie? (Ext. App)
 
Mit Win-Xspy arbeite ich ja schon.

http://img112.imageshack.us/img112/4...ntrolid8fy.png

Ich komm bis zum Klassennamen. Wie kann ich nun die ControlID der Progressbar ermitteln?

Delphi-Quellcode:
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;
Ich hab mal den Titel geändert ... :D

Amnon82 24. Apr 2006 17:25

Re: ControlID einer Progressbar finden. Wie? (Ext. App)
 
http://img74.imageshack.us/img74/8876/switchids2yh.png

Die ID von der Klasse der Progressbar1 ist die der zweiten Progressbar und andersherum.
Nur klappt mein Code nicht:

Delphi-Quellcode:
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;
... man müsste alle IDs von den Progressbar-Klassen auslesen und zuordnen ...

Amnon82 24. Apr 2006 19:26

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.

Die Muhkuh 24. Apr 2006 19:27

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 ;)

Amnon82 24. Apr 2006 20:17

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:

Kann man auf die COMCTL32.OCX zugreifen? Es könnten ja dort die Informationen, die ich brauche, liegen ...

Amnon82 24. Apr 2006 20:47

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?

http://img244.imageshack.us/img244/1...dhandle0vg.png

Im Beispiel währe es $002C0DC6 in DelphiHEX

Amnon82 24. Apr 2006 21:42

Re: Sourcecode: Progressbars über ControlID von ext. App fin
 
Liste der Anhänge anzeigen (Anzahl: 1)
Und wieder bin ich schlauer :D

Hier der MOD:

http://img274.imageshack.us/img274/7...planner7ht.png

Die Muhkuh 25. Apr 2006 12:58

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