Ich bin leider zu doof um das per DLL-Calls selbst lösen zu können und eine Lösung mittels Postionsermittlung kommt hier nicht in Frage.
Weder das Eine noch das Andere brauchst du dazu, sondern: GuiRegisterMsg
Guckst du:
Spoiler anzeigen
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
$Form1 = GUICreate("Form1")
GUISetOnEvent($GUI_EVENT_CLOSE, '_ende')
$b = GUICtrlCreateButton('Button', 10, 10, 60, 20)
$in0 = GUICtrlCreateInput('', 100, 60, 60)
$in1 = GUICtrlCreateInput('', 100, 90, 60)
$in2 = GUICtrlCreateInput('', 100, 120, 60)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While True
Sleep(100)
WEnd
Func _ende()
Exit
EndFunc
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Switch $iCode
Case $EN_SETFOCUS ; Sent when an edit control receives the keyboard focus
Switch $hWndFrom
Case GUICtrlGetHandle($in0)
ConsoleWrite('Fokus erhalten: Input 0' & @CRLF)
Case GUICtrlGetHandle($in1)
ConsoleWrite('Fokus erhalten: Input 1' & @CRLF)
Case GUICtrlGetHandle($in2)
ConsoleWrite('Fokus erhalten: Input 2' & @CRLF)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND