Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Fri Apr 17, 2026 12:50    Post subject: Reply with quote

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   

Скорость - космос. Пока не знаю, ближний это космос или дальний, но то, что космос, однозначно Smile
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group