Orion9

|
Posted: Tue May 13, 2025 18:30 Post subject: |
|
|
AkulaBig wrote: | Я уже забыл, верхнее меню это что у нас? |
Это то, к чему Гислер за 30 лет не сделал никакого GUI, хотя именно это нужно было делать в первую очередь, а не отмазываться от пользователя неудобным меню "Запуск", которое, как выяснилось, имеет еще и кривую многоязычную поддержку, исправлять которую он теперь не желает. Как-то так.
Думал, что еще не скоро возьмусь за Autorun, но понадобилась одна фича, над которой сейчас работаю. Простенький монитор каталога, чтобы отслеживал изменения и сообщал об удаленных файлах в реальном времени. Попутно сделал кнопку для подсчета времени воспроизведения в каталоге. Что-то подобное делает плагин MediaTime. При желании можно полностью заменить его функционал, если не устраивает одиночное нажатие кнопки:
 Hidden text TOTALCMD#BAR#DATA
62013
%COMMANDER_EXE%
Подсчёт времени воспроизведения
-1
 Hidden text Code: | RegisterCommand 62013 "DurationInfo"
Func DurationInfo(lParam)
Local name = RequestCopyDataInfo("SN")
Local file = RequestCopyDataInfo("SP") & RequestCopyDataInfo("SN")
If Not FileExist(file) Then
ShowHint("Файл не существует " & file)
Return
Endif
Local obj = Plugin("TCMediaInfo")
If ERROR <> 0 Then
ShowHint("TCMediaInfo plugin error " & ERROR)
Return
Endif
Local s = 0
If Not StrPos(FileGetAttr(file), "D") Then
obj.FileName = file
s = obj.GetValue(0) # duration
ShowHint("Файл: " & name & auCRLF & "Длительность: " & s)
Free(obj)
Return
Endif
Local i, out, files = 0, aFiles = List(), seconds = 0
ShowHint("Подсчёт времени")
# загрузка файлов в массив
ProcessExecGetOutput /OEM out %COMSPEC% "/c dir /s /b *.*" %"file"
aFiles.Text = out
# ShowHint("Обработка " & aFiles.Count & " элементов")
For i = 0 To aFiles.Count - 1
obj.FileName = aFiles[i]
s = obj.GetValue(0,2) # duration -> seconds
If s > 0 Then
seconds += s
files += 1
EndIf
Next
Free(obj)
Local day = Floor(seconds / 86400)
Local hour = Floor((seconds - (day * 86400)) / 3600)
Local min = Floor(((seconds - (day * 86400)) - (hour * 3600)) / 60)
Local sec = seconds - (day * 86400 + hour * 3600 + min * 60)
Local total = StrFormat("%02d:%02d:%02d:%02d",day,hour,min,sec)
ShowHint("Каталог: " & name & auCRLF & _
"Элементов: " & aFiles.Count & auCRLF & _
"Обработано: " & files & auCRLF & _
"Секунд: " & seconds & auCRLF & _
"Минут: " & Round(seconds / 60, 2) & auCRLF & _
"Часов: " & Round(seconds / 3600, 2) & auCRLF & _
"Суток: " & Round(seconds / 86400, 2) & auCRLF & _
"Длительность: " & total)
EndFunc |
Функция полностью завязана на плагин TCMediaInfo и его поля, хотя, конечно, можно было и через DllCall сделать, но использование объекта Plugin сводит весь код на Autorun до смешных нескольких строк. |
|