- Offizieller Beitrag
Ich hatte nach einer eleganten Lösung für dieses Problem gesucht und habe sie auch gefunden.
Falls jemand mal vor dem Problem steht, will ich euch das nicht vorenthalten.
Wozu braucht man das?
Nun, wenn man mit GuiRegisterMsg arbeitet muss die Callbackfunktion schnellstmöglich verlassen werden. MsgBox, InputBox etc. dürfen von dort nicht aufgerufen werden
Nehmen wir aber an, eine in Auswertung der Callbackfunktion aufzurufende Funktion muss auf Usereingabe warten oder eine MsgBox zeigen, dann würde die Rückkehr aus der Callbackfunktion nicht absehbar sein und könnte zu undefinierten Zuständen (bis zum Absturz) führen. Bisher hatte ich dann immer eine Triggervariable gesetzt, deren Wert ich in der Hauptprogrammschleife überprüfte und dann die entsprechende Funktion aufrief.
Das geht aber auch eleganter. Man verwendet ein Control (wenn es sonst nicht benötigt wird, tuts auch ein Dummy) und läßt es auslösen. ControlClick ist eine Möglichkeit, funktioniert aber nicht in jeder Situation.
Mit dem folgenden Einzeiler kann man nun ganz elegant und sicher die Control-ID des gewünschten Controls in den Windows Nachrichtenstrom befördern und normal mit GuiGetMsg oder im OnEventMode auswerten.
_WinAPI_PostMessage($Handle_GUI, $WM_COMMAND, $ID_Ctrl, 0)
[/autoit]