Edit-Feld, eindeutig identifizieren

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Edit-Feld, eindeutig identifizieren

02 Oct 2018, 15:29

Guten Abend,
Wie kann ich ein Edit-Feld, eindeutig identifizieren, wenn sich ClassNN bei jeden erneuten Aufruf ändert?
Und Was ist ein Instanznummer? und wie finde ich das heraus ?
Gruß und schönen Abend
just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Edit-Feld, eindeutig identifizieren

03 Oct 2018, 03:15

Guten Morgen,

die sogenannte ClassNN ist eine AutoIt/AutoHotkey Erfindung und hat in der 'realen Welt' der Fenster und Steuerelemente keineEntsprechung. Sie wird vergeben, indem bei der Aufzählung der Steuerelemente einer Fensters eine laufende Nummer an den Klassennamen angehängt wird. Das erste gefundene Editfeld hat damit die ClassNN Edit1, das zweite Edit2 usw.

Wie man sieht, ist die Instanznummer (NN) von der Reihenfolge abhängig, in der die Steuerelemente aufgezählt werden. In vielen Fällen ist die immer gleich. Die ClassNN ist dann eindeutig.

Eine Anwendung kann diese Reihenfolge aber auch bewusst verändern, um z.B. ein bestimmtes Steuerelement in den Vordergrund zu bringen. Das führt dazu, dass sich auch die CLassNNs der Steuerelemente gleicher Klasse ändern.

Klassische Windows-Anwendungen können den Steuerelementen eines Fensters bei der Erstellung aber auch eine eindeutige ID zuweisen. Die ändert sich dann während der Lebenszeit des Steuerelements nicht. Nachdem man sich das Handle des Steuerlements geholt hat, kann man sie mit der Funktion GetDlgCtrlID() abrufen. Vielleicht hast Du damit mehr Glück. Das folgende Testskript ist allerdings recht grob gestrickt:

Code: Select all

#NoEnv

^+q:: ; Strg+Shift+q drücken, um die ID des Steuerelements unter dem Mauscursor abzufragen
MouseGetPos, , , , HCTRL, 2 ; holt das Handle des Steuerelements
CtrlID := DllCall("GetDlgCtrlID", "Ptr", HCTRL, "Int") ; holt die ID des Steuerelements
MsgBox, 0, Steuerelement, Handle: %HCTRL% - CtrlID: %CtrlID%
Return
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: Edit-Feld, eindeutig identifizieren

03 Oct 2018, 10:38

Danke, für die Super Erklärung!

Steuerelement weglassen und statt Fenstertitel-Parameter ahk_id %SteuerelementHwnd% eingeben, wenn ich die Dokumentation richtig verstehe.

Code: Select all

F3::
Marke = "Samsung"
Control, EditPaste, %Marke%, ,ahk_id %0x160756%
just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Edit-Feld, eindeutig identifizieren

03 Oct 2018, 11:42

Das Handle (HWND) ist während der Lebenszeit eines Steuerelements immer eindeutig. Es wird aber beim Erstellen eines Fensters jedesmal neu und in der Regel mit anderem Wert vergeben. Um das verwenden zu können, musst Du Dir deshalb sicher sein, dass Du Dir das aktuelle Handle des 'richtigen' Edit-Controls geholt hast.
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: Edit-Feld, eindeutig identifizieren

03 Oct 2018, 13:23

@just me
habe es auch festgestellt. Daher arbeite ich jetzt klassisch mit Position.


Code: Select all

ControlClick,  x213 y204, Lager Artikel
sleep, 200
SendInput, {ctrl down}a{ctrl up}
sleep, 200
SendInput, {BS}
sleep, 200

ControlClick,  x213 y204, Lager Artikel
sleep, 200
SendInput, {ctrl down}v{ctrl up}
sleep, 200
SendInput, {Space}
sleep, 200

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 15 guests