Orion9

|
Posted: Wed May 13, 2026 20:38 Post subject: |
|
|
AkulaBig
К сожалению, на счет au3 не могу ничего сказать, но сделал тест скорости на Autorun. Там речь действительно идет даже не о сверхзвуке, а о космических скоростях
Win+[ запуск exiftool для каждого файла. Win+] держит процесс открытым и взаимодействует с ним через файл аргументов. Вывод попадает во временный файл, откуда затем считывается. Если всё ровно, то байты обоих выводов должны совпасть, что и происходит. Но есть проблема с русскими именами файлов, пока не стал с этим разбираться.
Работает только на выделенных файлах. Попробуйте. Как у вас прирост?
 Hidden text | Code: | SetHotkeyAction /K:W /V:219 TestExiftoolSpeed 0
SetHotkeyAction /K:W /V:221 TestExiftoolSpeed 1
Static sExif = COMMANDER_PATH & "\Plugins\wlx\ExifToolView\exiftool.exe"
Static sExifOut = TEMP & "\exiftool_out.txt", sExifArgs = TEMP & "\exiftool_args.txt"
Func TestExiftoolSpeed(StayOpen)
Local aSel = List(), sFile
Local sPath = RequestCopyDataInfo("SP"), j, files = 0, str
aSel.Text = GetSelectedItems(3, 0)
If StayOpen = 1 And Not ProcessExist("exiftool.exe") Then
FileWrite(sExifArgs, "", "UTF-8 NOBOM")
ShellExec /TT /SW_HIDE %sExif% "-stay_open True -@ ""%sExifArgs%"""
Sleep 100
Local nPID = ProcessGetId("exiftool.exe")
If nPID = 0 Then Return MsgBox("Процесс ExifTool не запущен")
EndIf
T1 = GetUptime()
ShowHint("Обработка выделенного Exiftool.exe")
For j = 0 To aSel.Count - 1
sFile = sPath & aSel[j]
If FileExist(sFile) And Not StrPos(FileGetAttr(sFile), "D") Then
files += 1
str &= ExiftoolInfo(sFile, StayOpen)
EndIf
Next
T2 = Round(GetUptime() - T1, 0) / 1000
ShowHint("Выбрано: " & aSel.Count & auCRLF & _
"Обработано: " & files & auCRLF & _
"-stay_open: " & (StayOpen ? "Да" : "Нет") & auCRLF & _
"Объем данных: " & SizeFormat(StrLen(str), 0, 'B', 2) & auCRLF & _
"Время операции: " & StrFormat("%.3f", T2) & " sec")
Free(aSel)
ClipPut(str)
EndFunc
Func ExiftoolInfo(FileName, StayOpen)
If Not StayOpen Then
ProcessExecGetOutput /C:65001 out %sExif% ' -charset filename=utf8 -G -S -lang ru "%FileName%"'
Else
If FileExist(sExifOut) Then
DllCall("kernel32.dll\DeleteFileW", "Wstr", sExifOut)
EndIf
Local sArgs = "-G" & auCRLF & _
"-S" & auCRLF & _
"-lang" & auCRLF & _
"ru" & auCRLF & _
"-W+!" & auCRLF & sExifOut & auCRLF & FileName & auCRLF & "-execute" & auCRLF
Static obj = BinaryFile(sExifArgs, "a")
obj.WriteStr(sArgs, "", "UTF-8")
out = "<time-out>"
For i = 1 To 50
If FileExist(sExifOut) Then
out = FileRead(sExifOut, 0, "UTF-8")
DllCall("kernel32.dll\DeleteFileW", "Wstr", sExifOut)
Break
EndIf
Sleep(20)
Next
EndIf
Return out
EndFunc |
|
|