Тема: AHK: Реальный прогресс бар + копирование/удаление по файлу списка
Добрый вечер всем!
Сделал прогресс бар, который основан на расчете процентов общего объема копируемых/удаляемых файлов.
Функцию расчета процентов выдрал где-то на буржуйском форуме.
Собсна, вот код:
DestDrive := "J:" ; Целевой диск с файлами из списка TestFileList.txt . Файлы могут располагаться в любом диске
Gui Color, Black
Gui +LastFound +ToolWindow -Caption -Resize +AlwaysOnTop 0x800000
Gui Font, s10, Verdana
Gui Add, Progress, x10 y10 w280 h20 vIndicator c00C6FF Background000000
Gui Add, Text, x10 y10 w280 h20 +0x200 cFFFFFF +Center +BackgroundTrans vDonPercents
Gui Add, Text, x10 y+2 w280 h20 +0x200 c00C6FF +Center +BackgroundTrans vFilesName
Gui Show, w303 h55
WinSet Region, 0-0 w303 h55 R13-13
WinSet Transparent, 200
Loop read, % A_ScriptDir . "\TestFileList.txt" ; Считываем из файла листинга Fool Path всех файлов
{
StringLeft, WordDrive, A_LoopReadLine, 9 ; Выделяем из строк файла листинга слово DestDrive
FileFPinList := RegExReplace(A_LoopReadLine, "DestDrive", DestDrive) ; Замещаем слово "DestDrive" на букву диска, где находятся искомые файлы
SplitPath FileFPinList, FileName ; Имя считываемого файла
FileGetSize, FileSize, % FileFPinList, K ; Получаем размер считываемого файла в килобайтах
TotalSize += FileSize ; Объем всех файлов
TotalFiles := A_Index ; Количество всех файлов (строк) в списке
}
TotalSize := 100
Loop %TotalSize%
{
GuiControl 1:, DonPercents, % ProgressBar(28, A_index, TotalSize)
Sleep 50
}
;__________________________________________________________________________________________________________________
; Function
ProgressBar(Length, Current, Max, Unlock = 0)
{
Percent := (Current / Max) * 100
if (unlock = 0)
length := length > 97 ? 97 : length < 4 ? 4 : length
percent := percent > 100 ? 100 : percent < 0 ? 0 : percent
Loop % round(((percent / 100) * length), 0)
Progress .= ""
GuiControl 1:, Indicator, +1
Loop % Length - round(((percent / 100) * length), 0)
Progress := ""
return progress round(percent, 2) "% завершено"
}
Sleep 3000
ExitApp
Фрагмент файла листинга:
DestDrive\boot\fonts\segmono_boot.ttf
DestDrive\boot\fonts\segoe_slboot.ttf
DestDrive\boot\fonts\segoen_slboot.ttf
DestDrive\boot\fonts\wgl4_boot.ttf
DestDrive\boot\GFXBoot.gfx
... и т.д.
Не могу прикрутить обновление в прогрессе имен считываемых файлов.
Если добавить
GuiControl 1:, FilesName, % FileName
в цикл Loop read, % A_ScriptDir . "\TestFileList.txt", то файлы прокручиваютя слишком быстро. Если добавить Sleep, то перестает работать прогресс ... Уже мозги плавятся!
Как сделать? Пожалуйста, помогите допилить этот скрипт ...
Может что-то еще можно улучшить/модернизировать? ...
Благодарю за помощь!