Orion9

|
Posted: Fri Apr 17, 2026 12:50 Post subject: |
|
|
| Quote: | | Позже запишу гифку, чтобы понятнее было |
Вызывать exiftool.exe для каждого файла - медленно, это понятно. По этой причине вы и хотели ускориться. Опция -stay_open позволяет это сделать, т.к. процесс ExifTool запускается только один раз, а дальнейшее общение с ним происходит через файл параметров, который указывается в опции -@. Как только новые параметры появляются в этом файле с маркером -execute, ExifTool их выполняет. Результат передается либо в stdout, либо во внешний файл. Поскольку ProcessExecGetOutput в Autorun ждет завершения процесса, прежде чем предать полученные данные назад в плагин (о чем, кстати, неплохо написал ИИ), придется использовать только второй вариант с созданием временного файла.
Фрагмент из модуля может показаться большим, но нужного кода там мало, буквально 20 строк.
Запуск ExifTool и создание файла параметров во временном каталоге
| Code: | If gExifStay Then
FileWrite(gExifArgs, "", "UTF-8 NOBOM")
ShellExec /TT /SW_HIDE %gMediaExifX32% "-stay_open True -@ ""%gExifArgs%"""
gExifPID = ProcessGetId("exiftool.exe")
If gExifPID = 0 Then MsgBox("Процесс ExifTool не запущен")
EndIf |
Основное тело. Временный файл (для вывода ExifTool) удаляется. Файл параметров заполняется с маркером -execute. Далее код ожидает появление нового временного файла с выводом ExifTool, и как только он появляется, данные с него считываются и, собственно, дальше передаются для обработки и вывода подсказки. Здесь я добавил параметры "-g1" и "-lang ru", чтобы вывод был такой же, как в wlx плагине от Progman13.
| Code: | If FileExist(gExifOut) Then
ShellExec /SW_HIDE %COMSPEC% '/c del /f /q "%gExifOut%"'
EndIf
#Local sArgs = "-W+!" & auCRLF & gExifOut & auCRLF & FileName & auCRLF & "-execute" & auCRLF
Local sArgs = "-g1" & auCRLF & _
"-lang" & auCRLF & _
"ru" & auCRLF & _
"-W+!" & auCRLF & gExifOut & auCRLF & FileName & auCRLF & "-execute" & auCRLF
Local obj = BinaryFile(gExifArgs, "a")
obj.WriteStr(sArgs, "", "UTF-8")
Free(obj)
ansi = "<time-out>"
For i = 1 To 50
If FileExist(gExifOut) Then
ansi = FileRead(gExifOut)
ShellExec /SW_HIDE %COMSPEC% '/c del /f /q "%gExifOut%"'
Break
EndIf
Sleep(20) # time-out
Next
EndIf
|
Скорость - космос. Пока не знаю, ближний это космос или дальний, но то, что космос, однозначно  |
|