Если отбросить работу самой программы, то как сделать вот это (хочу понять сам принцип):
Поправьте код
Код:

#include <WindowsConstants.au3> ;Стиль окон GUI
#include <GUIConstantsEx.au3> ;Раширенный стили GUI
TraySetToolTip('Название')
Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)
TraySetState(1)
$iRegistration = TrayCreateItem('Регистрация программы')
TrayItemSetOnEvent(-1, "_Registration")
$iExit = TrayCreateItem('Выход')
TrayItemSetOnEvent(-1, '_Quit')
;Программа запущена в трее и выполняет _SomeFunc() раз в 3 секунды
While 1
_SomeFunc()
Sleep(3000)
WEnd
Func _SomeFunc()
;Основная работа программы
ConsoleWrite('Основной цикл' & @LF)
EndFunc
;Функция вызова GUI окна. После отработки должно исчезнуть, а программа должна продолжить работать по основному циклу.
Func _Registration()
Opt("GUIOnEventMode", 1)
$hGui = GUICreate('Регистрация программы', 370, 225)
GUISetOnEvent($GUI_EVENT_CLOSE, "_CLOSEClicked")
$BtnOk = GUICtrlCreateButton("ОК", 250, 190, 100, 25)
GUICtrlSetOnEvent($BtnOk, "_OKButton")
GUISetState()
While 1
Sleep(1000)
WEnd
EndFunc
Func _CLOSEClicked()
If @GUI_WinHandle = $hGui Then
;Закрыть окно и продолжить основной цикл
EndIf
EndFunc
Func _OKButton()
MsgBox(4096 + 64, '', 'Регистрация произведена!')
;Выполнить некоторые операции, закрыть окно и продолжить основной цикл
EndFunc
Func _Quit()
Exit
EndFunc