#NoTrayIcon ; скрыть иконку в трее
Opt("GUICloseOnESC", 1) ; выход по ESC
$Gui = GUICreate("Патч файла", 420, 194, -1, -1, -1, 0x00000010)
GUICtrlCreateLabel ("используйте drag-and-drop", 220,2,160,17)
;$StatusBar=GUICtrlCreateLabel (@CRLF&@CRLF&'Строка состояния', 10,173,280,57)
$Label1 = GUICtrlCreateLabel("Файл изменяемый", 24, 10, 155, 17)
$Input1 = GUICtrlCreateInput("", 24, 27, 305, 21)
GUICtrlSetState(-1, 8)
$folder1 = GUICtrlCreateButton("Обзор...", 344, 26, 57, 23)
$Label2 = GUICtrlCreateLabel("Файл, который внедряется в файл изменяемый", 24, 60, 285, 17)
$Input2 = GUICtrlCreateInput("", 24, 77, 305, 21)
GUICtrlSetState(-1, 8)
$folder2 = GUICtrlCreateButton("Обзор...", 344, 76, 57, 23)
GUICtrlCreateLabel("Смещение:", 24, 126, 66, 17)
GUICtrlCreateLabel("байт", 250, 126, 66, 17)
$offset = GUICtrlCreateInput("3240000", 140, 123, 105, 21)
GUICtrlCreateLabel("Размер блока замены:", 24, 156, 118, 17)
GUICtrlCreateLabel("байт", 250, 156, 66, 17)
$blok = GUICtrlCreateInput("", 140, 153, 105, 21)
GUICtrlCreateLabel("Кэш:", 286, 126, 36, 17)
GUICtrlCreateLabel("Мб", 375, 126, 36, 17)
$SizeCache = GUICtrlCreateCombo ("", 316, 123, 55, 21)
GUICtrlSetData(-1,'1|10|50|150|300', '10')
$Patch = GUICtrlCreateButton("Патч", 304, 157, 77, 30)
GUISetState ()
While 1
$msg = GUIGetMsg()
Select
Case $msg = -13
If @GUI_DropID=$Input1 Then GUICtrlSetData($Input1, @GUI_DRAGFILE)
If @GUI_DropID=$Input2 Then GUICtrlSetData($Input2, @GUI_DRAGFILE)
Case $msg = $Patch
$Input01=GUICtrlRead ($Input1)
$Input02=GUICtrlRead ($Input2)
$offset0=GUICtrlRead ($offset)
$SizeCache0=GUICtrlRead ($SizeCache)
$blok0=GUICtrlRead ($blok)
$filename=StringRegExp($Input01,'(^.*)\\(.*)\.(.*)$',3)
$file = FileOpen($Input01, 16)
;$size = FileGetSize($Input01)
$ostatok=Mod( $offset0, $SizeCache0*1024*1024 )
$n=($offset0-$ostatok)/($SizeCache0*1024*1024)
$fileNew = FileOpen($filename[0]&'\New_'&$filename[1]&'.'&$filename[2],18)
$filePatch = FileOpen($Input02, 16)
$textPatch = FileRead($filePatch)
FileClose($filePatch)
For $i = 1 to $n
$Bin = FileRead($file, $SizeCache0*1024*1024)
If @error = -1 Then ContinueLoop 2
FileWrite($fileNew, $Bin)
Sleep(1)
Next
$Bin = FileRead($file, $ostatok)
If @error = -1 Then ContinueLoop
FileWrite($fileNew, $Bin)
Sleep(1)
If $blok0<>'' And $blok0>0 And IsInt(Int($blok0)) Then $Bin = FileRead($file, $blok0)
If @error = -1 Then ContinueLoop
FileWrite($fileNew, $textPatch)
Sleep(1)
While 1
$Bin = FileRead($file, $SizeCache0*1024*1024)
If @error = -1 Then ExitLoop
FileWrite($fileNew, $Bin)
Sleep(1)
WEnd
FileClose($fileNew)
FileClose($file)
; кнопки обзор
Case $msg = $folder1
$folder01 = FileOpenDialog("Указать файл", @WorkingDir & "", "Любой (*.*)", 1 + 4 )
If @error Then ContinueLoop
GUICtrlSetData($Input1, $folder01)
Case $msg = $folder2
$folder02 = FileOpenDialog("Указать файл", @WorkingDir & "", "Любой (*.*)", 1 + 4 )
If @error Then ContinueLoop
GUICtrlSetData($Input2, $folder02)
;Case $msg = $Readme
;MsgBox(0, 'Readme', ' Утилита для патча одного файла другим.')
Case $msg = -3
Exit
EndSelect
WEnd