AkulaBig
|
Posted: Sun May 17, 2026 10:43 Post subject: |
|
|
Orion9
Ну наконец-то и у меня получилось на au3. Пока сделал для одного поля. Работает быстро. Теперь надо решить вопрос с запуском/закрытием ET. Если с Ауторан запускать, закрывается сам при выходе из ТС. Но все время висит в памяти. Если запускать из скрипта, не закрывается при выходе из ТС. Если закрывать в скрипте, работает медленнее. Ну это понятно. На каждом файле запускается/закрывается.
 Hidden text
| Code: |
#NoTrayIcon
If StringInStr(FileGetAttrib($filename), "D") Then Exit
Local $sExifPath = EnvGet("util_ET") ; Путь к exiftool
Global $sArgFile = @TempDir & "\exiftool_args.txt"
Global $sOutFile = @TempDir & "\exiftool_out.txt"
; Подготовка файла аргументов
FileDelete($sArgFile)
FileWrite($sArgFile, "")
; Запуск процесса ExifTool (один раз)
If Not ProcessExists("exiftool.exe") Then
; Используем $STDIN_CHILD + $STDOUT_CHILD для взаимодействия
Global $iPID = Run($sExifPath & ' -stay_open True -@ "' & $sArgFile & '"', "", @SW_HIDE, 0x3)
EndIf
$content = GetTag($filename, "Title")
; MsgBox(64, "Результат", $content)
; Закрываем ExifTool
; Quit()
ConsoleWrite($content)
; --- Функция получения данных ---
Func GetTag($sFile, $sTag)
If FileExists($sOutFile) Then FileDelete($sOutFile)
; Формируем команду
; -s3: только значение, -S: краткий формат, -echo4: выводит маркер в StdOut после завершения
Local $sCmd = "-s3" & @LF & "-" & $sTag & @LF & "-W+!" & @LF & $sOutFile & @LF & $sFile & @LF & "-execute" & @LF
; Записываем команду в файл аргументов
Local $hFile = FileOpen($sArgFile, 1) ; 1 = Write mode (append)
FileWrite($hFile, $sCmd)
FileClose($hFile)
Local $hFile
Local $sOut = ""
While 1
$hFile = FileOpen($sOutFile)
If $hFile <> -1 Then
$sOut = FileRead($hFile)
FileClose($hFile)
FileDelete($sOutFile)
ExitLoop
EndIf
WEnd
Return $sOut
EndFunc
; --- Функция закрытия ---
Func Quit()
Local $hFile = FileOpen($sArgFile, 1)
FileWrite($hFile, "-stay_open" & @LF & "False" & @LF)
FileClose($hFile)
ProcessWaitClose("exiftool.exe")
FileDelete($sArgFile)
EndFunc
|
Обратите внимание, надо полностью убрать задержку. Тогда все хорошо работает, а не читаемые данные обрабатываются правильно. Так что ничего не виснет.
Сейчас в первую очередь приделаю все поля и перекодировку. А потом начну до ума доводить.
Вот-бы разобраться с -@ -. Там вообще временные файлы не используются что ли. Не понятно, куда тогда аргументы пишутся.
Ну и в преспективе разобраться-бы с потоками для au3. |
|