Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dynamisch Erzeugte Control IDs finden (https://www.delphipraxis.net/203582-dynamisch-erzeugte-control-ids-finden.html)

jacky213 2. Mär 2020 14:47


Dynamisch Erzeugte Control IDs finden
 
Ich wollte einen Button in einer externen Anwendung betätigen und habe dafür mittels X-Spy die Control ID ermittelt. Soweit so gut, allerdings verändern sich die Control ID's bei jedem Programmstart und ich muss diese dann wieder suchen. Ich konnte mir bereits alle Control ID's einer bestimmten Klasse aus der externen Anwendung laden und müsste nun wissen wie ich an die Button Captions oder die Namen komme.

Danke im Vorraus

Luckie 3. Mär 2020 03:16

AW: Dynamisch Erzeugte Control IDs finden
 
Eher ungewöhnlich, dass sich die ID ändert. Über die ID "spricht" man als Programmierer in seinem Code ja auch an:
Code:
btnClose = 1001;
btnSave = 1002;
Das sich das Handle ändert ist logisch, denn Windows vergibt bei jedem Programmstart neu. Was ja auch Sinn ergibt, denn Windows benötigt eine systemweit einmalige ID für das Control und das ist das Handle, weil es sehr Wahrscheinlich ist, dass die Programmierer in ihren Anwendungen die Schaltfläche zum Schließen btnColse genannt haben. Deswegen kann deine Beobachtung, dass sich die Control-ID bei jedem Start anders ist, falsch ist.

jacky213 3. Mär 2020 08:04

AW: Dynamisch Erzeugte Control IDs finden
 
Tjoaa aber X-Spy zeigt mir bei jedem Neustart der externen Anwendung eben eine neue Control ID bei jedem Button.

Woran kann das liegen?

Komisch ist auch das einige Buttons sich manchmal klicken lassen und manchmal nicht.

jacky213 3. Mär 2020 08:27

AW: Dynamisch Erzeugte Control IDs finden
 
Folgender Code kommt bei mir ohne Button Titel zurück.

Delphi-Quellcode:
function GetButtonText (wnd: HWND; ID:Integer) : String;
var
  AR: array[0..254] of Char;
begin
  wnd := GetDlgItem(wnd,ID);
  GetWindowText(wnd, @AR, SizeOf(AR));
  Result : = AR;
end;
Kann ich diese Button Suche umgehen und irgendwie analysieren welche Message dieser Button an die Hauptanwendung schickt und das Simulieren?

himitsu 3. Mär 2020 18:21

AW: Dynamisch Erzeugte Control IDs finden
 
Zitat:

Zitat von Frühlingsrolle (Beitrag 1458832)
dann muss das HWND des Panels übergeben werden.

Die Doku sagt was Anderes.
Zitat:

A handle to the dialog box that contains the control.
Aber es kann natürlich sein, dass DialogItems immer direkt auf dem Fenster liegen müssen (z.B. Groupbox drumrum, statt darunter), damit das mit der ID richtig funktioniert.

jacky213 3. Mär 2020 18:22

AW: Dynamisch Erzeugte Control IDs finden
 
Und wieder vielen Dank an Frühlingsrolle, sehr interessanter Ansatz. Werde mir das direkt anschauen.

Neumann 3. Mär 2020 19:22

AW: Dynamisch Erzeugte Control IDs finden
 
Wenn man Buttons dynamisch erzeugt, kann man doch auch das Tag-Property setzen und damit den Button wiederfinden.

Habe ich schon öfter so gemacht.

Neumann 3. Mär 2020 19:26

AW: Dynamisch Erzeugte Control IDs finden
 
Habe "Externe Anwendung" überlesen. Wenn man keinen Zugriff auf den Quellcode hat dann geht das mit dem Tag natürlich nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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