Hum, recuerda que siempre pedimos ver el código que se está haciendo, así ya tenemos algo sobre lo que trabajar y además vemos que efectivamente estás trabajando en ello...
Te pongo un esquema de ejemplo, seguir a partir de aquí es trivial. En este caso he hecho que las tres aplicaciones hagan prácticamente lo mismo, pero lógicamente variarlas es cosa de cambiar los controles de cada ventana y su funcionalidad.
Otra forma parecida sería crear todos los GUI al principio, pero ocultos, y al "ejecutar aplicación" lo que se haría es mostrarlo y entrar en su bucle de eventos. Esto es más adecuado cuando se pase muchas veces de una aplicación a otra. Cuando no se hacen muchos cambios es mejor no tener los GUI siempre en memoria, sino ir creándolos y destruyéndolos en demanda (es lo que yo he hecho en este ejemplo). Naturalmente si creas los GUI desde el principio, sus controles no pueden llamarse igual, al crearlos por separado si se puede hacer, por ejemplo yo he llamado
$btnCerrar a los tres botones de cerrar de las aplicaciones, pero son tres botones diferentes.
Ojo que lo más fácil es ocultar la ventana principal cuando abras otra, así te centras sólo con los eventos de la ventana visible. Se pueden tener varios GUI abiertos a la vez pero entonces la gestión de eventos se vuelve bastante más complicada.
He empezado a usar to código pero como puedes ver he quitado algunas cosas que sobraban y he puesto nombres que ayudan a saber lo que estamos haciendo, ¿a que se entiende mejor viendo
$GUI_principal y
$GUI_programa1 que
$Form1 y
$Form2 o
$btnCerrar que
$Button1?
Código: Seleccionar todo
#include <GUIConstantsEx.au3>
$GUI_principal = GUICreate("3 en 1", 250,200, -1,100)
$btnProg1 = GUICtrlCreateButton("proyecto 1", 72, 32, 105, 33)
$btnProg2 = GUICtrlCreateButton("proyecto 2", 72, 80, 105, 33)
$btnProg3 = GUICtrlCreateButton("proyecto 3", 72, 128, 105, 33)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btnProg1
GUISetState(@SW_HIDE)
_ArrancaPrograma1()
Case $btnProg2
GUISetState(@SW_HIDE)
_ArrancaPrograma2()
Case $btnProg3
GUISetState(@SW_HIDE)
_ArrancaPrograma3()
EndSwitch
WEnd
Func _ArrancaPrograma1()
$GUI_programa1 = GUICreate("PROGRAMA 1", 300,150)
GUICtrlCreateLabel("¡¡Soy el programa UNO!!", 30,30 ,250,30)
GUICtrlSetFont(-1, 14, 800)
$btnCerrar = GUICtrlCreateButton("Cerrar", 100,80, 100,30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $btnCerrar
GUIDelete($GUI_programa1)
GUISetState(@SW_SHOW, $GUI_principal)
Return
EndSwitch
WEnd
EndFunc
Func _ArrancaPrograma2()
$GUI_programa2 = GUICreate("PROGRAMA 2", 300,150)
GUICtrlCreateLabel("¡¡Soy el programa DOS!!", 30,30 ,250,30)
GUICtrlSetFont(-1, 14, 800)
$btnCerrar = GUICtrlCreateButton("Cerrar", 100,80, 100,30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $btnCerrar
GUIDelete($GUI_programa2)
GUISetState(@SW_SHOW, $GUI_principal)
Return
EndSwitch
WEnd
EndFunc
Func _ArrancaPrograma3()
$GUI_programa3 = GUICreate("PROGRAMA 3", 300,150)
GUICtrlCreateLabel("¡¡Soy el programa TRES!!", 30,30 ,250,30)
GUICtrlSetFont(-1, 14, 800)
$btnCerrar = GUICtrlCreateButton("Cerrar", 100,80, 100,30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $btnCerrar
GUIDelete($GUI_programa3)
GUISetState(@SW_SHOW, $GUI_principal)
Return
EndSwitch
WEnd
EndFunc