Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.
Seite 1 von 2  1 2      

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