#NoTrayIcon
;~ #RequireAdmin;???
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/SO
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <WinAPI.au3>
Opt('MustDeclareVars', 1)
If Not @Compiled Then Exit MsgBox(64, 'Info', 'Run only compiled script!')
If Number(StringReplace(@AutoItVersion, '.', '')) > 3381 Then
If MsgBox(68, 'Info', 'Not tested on versions older than 3.3.8.1, continue?') <> 6 Then Exit
EndIf
If $CmdLine[0] = 2 Then
While ProcessExists($CmdLine[2])
Sleep(100)
WEnd
FileMove(@ScriptFullPath, $CmdLine[1], 1)
Exit
EndIf
If WinExists('[TITLE:{EB2990C3-57E0-4220-A11F-77495D321C54}; CLASS:AutoIt v3]') Then Exit
AutoItWinSetTitle('{EB2990C3-57E0-4220-A11F-77495D321C54}')
Global $hGui, $iComboBox, $sStrComboBox = 'First|Second|Third|Fourth|Fifth', $iChBox, $aiRd[3] = ['Yes', 'No', 'May be'], $aSett[1]
__GetMySetting($aSett)
TraySetState()
$hGui = GUICreate('MyGUI', 200, 140)
$iComboBox = GUICtrlCreateCombo('', 50, 20, 100, 20, $CBS_DROPDOWNLIST)
GUICtrlSetData($iComboBox, $sStrComboBox)
GUICtrlSendMsg($iComboBox, $CB_SETCURSEL, $aSett[0], 0)
$iChBox = GUICtrlCreateCheckbox('Test Checkbox', 50, 60, 100, 20, $BS_AUTO3STATE)
If $aSett[1] Then GUICtrlSetState($iChBox, $aSett[1])
GUICtrlCreateGroup('Select', 5, 80, 190, 50)
For $i = 0 To 2
$aiRd[$i] = GUICtrlCreateRadio($aiRd[$i], 10 + $i * 60, 100, 50, 20)
If $aSett[$i + 2] Then GUICtrlSetState($aiRd[$i], $aSett[$i + 2])
Next
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $iComboBox
;~ ConsoleWrite(GUICtrlSendMsg($iComboBox, $CB_GETCURSEL, 0, 0) & @LF)
Case $iChBox
;~ ConsoleWrite(GUICtrlRead($iChBox) & @LF)
EndSwitch
WEnd
__SaveMySetting()
Func __GetMySetting(ByRef $a_Sett)
Local $ab_Check[3] = [2, 0x21335541, 0x36304145], $i_Err = 1, $h_File, $t_Read, $p_Read, $i_Byte, $t_Check, $p_Check, _
$a_Default[5] = [0, 2, 1, 0, 0]
If UBound($a_Sett) <> 5 Then ReDim $a_Sett[5]
$t_Check = DllStructCreate('dword[2]')
$p_Check = DllStructGetPtr($t_Check)
$t_Read = DllStructCreate('byte[5]')
$p_Read = DllStructGetPtr($t_Read)
Do
$h_File = _WinAPI_CreateFile(@ScriptFullPath, 2, 2)
If Not $h_File Then ExitLoop
_WinAPI_SetFilePointer($h_File, -13, 2)
If @error Then ExitLoop
If (Not _WinAPI_ReadFile($h_File, $p_Check, 8, $i_Byte)) Or ($i_Byte <> 8) Then ExitLoop
For $i = 1 To 2
If DllStructGetData($t_Check, 1, $i) <> $ab_Check[$i] Then ExitLoop 2
Next
If (Not _WinAPI_ReadFile($h_File, $p_Read, 5, $i_Byte)) Or ($i_Byte <> 5) Then ExitLoop
If @error Then ExitLoop
For $i = 1 To 5
$a_Sett[$i - 1] = DllStructGetData($t_Read, 1, $i)
Next
$i_Err = 0
Until 1
If $h_File Then _WinAPI_CloseHandle($h_File)
If $i_Err Then $a_Sett = $a_Default
EndFunc ;==>__GetMySetting
Func __SaveMySetting()
Local $ab_Check[3] = [2, 0x21335541, 0x36304145], $i_Err = 1, $h_File, $t_Check, $p_Check, $t_ReadWrite, $p_ReadWrite, $i_Byte, $i_Pos = -20, _
$a_Default[5] = [0, 2, 1, 0, 0], $i_Size, $i_ReadWrite, $t_Sett, $p_Sett, $i_Pid
$t_Check = DllStructCreate('dword[2]')
$p_Check = DllStructGetPtr($t_Check)
$t_Sett = DllStructCreate('byte[5]')
$p_Sett = DllStructGetPtr($t_Sett)
$i_Size = FileGetSize(@ScriptFullPath)
Do
$h_File = _WinAPI_CreateFile(@ScriptFullPath, 2, 2)
If Not $h_File Then ExitLoop
_WinAPI_SetFilePointer($h_File, -13, 2)
If @error Then ExitLoop
If (Not _WinAPI_ReadFile($h_File, $p_Check, 8, $i_Byte)) Or ($i_Byte <> 8) Then ExitLoop
For $i = 1 To 2
If DllStructGetData($t_Check, 1, $i) <> $ab_Check[$i] Then
$i_Pos = 0
$t_ReadWrite = DllStructCreate('byte[' & $i_Size & ']')
ExitLoop
EndIf
Next
If $i_Pos Then
$t_ReadWrite = DllStructCreate('byte[' & $i_Size - 5 & ']')
EndIf
DllStructSetData($t_Sett, 1, GUICtrlSendMsg($iComboBox, $CB_GETCURSEL, 0, 0), 1)
DllStructSetData($t_Sett, 1, GUICtrlRead($iChBox), 2)
For $j = 0 To 2
DllStructSetData($t_Sett, 1, BitAND(GUICtrlRead($aiRd[$j]), $GUI_CHECKED), $j + 3)
Next
$p_ReadWrite = DllStructGetPtr($t_ReadWrite)
$i_ReadWrite = DllStructGetSize($t_ReadWrite)
_WinAPI_SetFilePointer($h_File, 0, 0)
If (Not _WinAPI_ReadFile($h_File, $p_ReadWrite, $i_ReadWrite, $i_Byte)) Or ($i_Byte <> $i_ReadWrite) Then ExitLoop
_WinAPI_CloseHandle($h_File)
$h_File = _WinAPI_CreateFile(@TempDir & '\~Temp_MyProg.exe', 1, 4)
If Not $h_File Then ExitLoop
If Not _WinAPI_WriteFile($h_File, $p_ReadWrite, $i_ReadWrite, $i_Byte) Or $i_Byte <> $i_ReadWrite Then ExitLoop
If Not _WinAPI_WriteFile($h_File, $p_Sett, 5, $i_Byte) Or $i_Byte <> 5 Then ExitLoop
$i_Err = 0
Until 1
If $h_File Then _WinAPI_CloseHandle($h_File)
If $i_Err Then Exit 1
$i_Pid = Run('"' & @TempDir & '\~Temp_MyProg.exe" "' & @ScriptFullPath & '" "' & @AutoItPID & '"')
Exit (Number($i_Pid <> 0))
EndFunc ;==>__SaveMySetting