#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
If Not @Compiled Then
MsgBox(0, '', 'Для работы необходимо скомпилировать скрипт!')
Exit
EndIf
$tempFullPath = @TempDir & '\' & @ScriptName
If $CmdLine[0] = 0 Then ;если исполняемый файл запущен без параметров, то копируем его во временную папку, запускаем из временной папки и завершаем работу
FileCopy(@ScriptFullPath, $tempFullPath, 9)
Run($tempFullPath & ' -work_in_temp "' & @ScriptFullPath & '"') ;передаем во временный файл путь до основного исполняемого файла
Exit
ElseIf StringCompare($CmdLine[1], '-delete_temp') = 0 Then ;если в качестве первого параметра идет -delete_temp, значит надо удалить временный файл
ProcessWaitClose(Number($CmdLine[2])) ;ждем пока временный файл не закончит работу (Во втором параметре передан PID процесса временного файла)
FileDelete($tempFullPath)
Exit
ElseIf StringCompare($CmdLine[1], '-work_in_temp') <> 0 Then ;если в качестве первого параметра не идет -work_in_temp, завершаем работу
Exit
EndIf
;иначе запускается временный исполняемый файл
$mainFileFullPath = $CmdLine[2] ;путь к основному файлу
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Users:", 321, 226, 192, 124)
$List1 = GUICtrlCreateList("", 0, 0, 319, 175)
$Button_AddUser = GUICtrlCreateButton("Add User", 50, 189, 75, 25)
$Button_RemoveUser = GUICtrlCreateButton("Remove User", 181, 189, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$asUsers = IniReadSection($CmdLine[2], 'Users')
If Not @error Then
For $i = 1 to UBound($asUsers, 1) - 1
_GUICtrlListBox_AddString($List1, $asUsers[$i][1])
Next
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button_AddUser
$user = InputBox('Enter User Name', '', '')
If $user <> '' Then
IniWrite($mainFileFullPath, 'Users', $user, $user) ;записываем данные в основной исполняемый файл - как будто это обычный ini-файл
_GUICtrlListBox_AddString($List1, $user)
EndIf
Case $Button_RemoveUser
$i = _GUICtrlListBox_GetCurSel($List1)
$user = _GUICtrlListBox_GetText($List1, $i)
IniDelete($mainFileFullPath, 'Users', $user)
_GUICtrlListBox_DeleteString($List1, $i)
EndSwitch
WEnd
If StringCompare($CmdLine[1], '-work_in_temp') = 0 Then ;если работал временный файл, то запускаем основной с указанием удалить временный
Run($mainFileFullPath & ' -delete_temp ' & @AutoItPID) ;вторым параметром передаем PID текущего процесса, для того что бы основной
; исполняемый файл перед удалением временного - дождался его завершения
EndIf
Exit