hier hast du das problem, dass der button ja nur existiert, falls vorher bereits das 2te gui gestartet wurde.
das script checkt aber sobald es gestartet wurde alle 5ms ob dieser button betätigt wurde. dh wenn du nicht innerhalb der ersten 5ms das 2te gui startest, kann autoit nichts mit der variable $button2 anfangen, da sie ja garnicht existiert :P
um das zu umgehen kannst du einfach am anfang des scripts die variable mit
als nicht genutzt definieren.
Hierbei kommt allerdings ein anderes problem ins spiel.
ich habe das script so aufgebaut das es automatisch immer neue guis erstellt, sobald im maingui der button genutzt wird.
wenn du jetzt mehrfach den button betätigst, wird zunächst ein neues gui erstellt, in dem $button2 definiert wird mit dem controlhandle vom button.
beim nächsten click wird wieder ein neues gui erstellt, und der wert in $button2 wird einfach überschrieben.
dh der button würde immer nur im zuletzt erstellten gui funktionieren.
wenn man per buttondruck sowieso maximal ein anderes gui erzeugen können soll, kannst du das einfach so lösen:
Code:
Dim $btn2 = -1, $gui2 = -1
$gui1 = GUICreate("Blah1", 150, 40, -1, -1, 0x10C80000)
$btn = GUICtrlCreateButton("klick mich", 10, 10, 130)
While 1
$msg = GUIGetMsg(1)
Switch $msg[0]
Case - 3
GUIDelete($msg[1])
Case $btn
If Not WinExists($gui2) Then
$gui2 = GUICreate("Blah2", 400, 200, -1, -1, 0x10C80000, -1, $gui1)
$btn2 = GUICtrlCreateButton("schließen", 20, 20, 50, 50)
EndIf
Case $btn2
GUIDelete($msg[1])
Case Else
If Not WinExists($gui1) Then Exit
EndSwitch
WEnd
willst du aber weiterhin den button des mainguis nicht einschränken und unendlich viele "zweit guis" erstellen lassn, musst du das ganze recht kompliziert über arrays oder Assign(...) lösen.