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: Sun Oct 04, 2026 20:34    Post subject: Reply with quote

Для начала. Если подсказка вызывается на тяжелом файле, ТС вешается, и приходится только ждать. Это обычное поведение тотала:

 Hidden text


Проблема с stdin/stdout, о которой я писал выше, выглядит следующим образом.

Когда ExifTool выполняет команду -execute, результат выполнения передается в stdout с маркером {ready}. PeekNamedPipe, добавленная в последнем коде, позволяет заглянуть в устройство вывода и проверить есть ли в нем данные. Если данных нет, то можно еще немного подождать и выйти по таймауту. Однако это не остановит саму ExifTool и не прервет операцию вывода. При наведении на следующий файл в подсказке будут отображаться даннные таймаута, а не текущего файла.

Чтобы синхронизировать процесс ввода-вывода, к команде -execute можно добавить любое число: тогда ExifTool пометит вывод для этой команды соответствующим маркером {ready+число}. Например: -execute320 --> {ready320}. Теперь можно пропарсить этот вывод, выкинув из него всё ненужное. Такой вариант я и попробовал, однако он не решает всех проблем. Подсказка легко скользит по панели и не вешает ТС даже на медленных файлах, но ExifTool продолжает делать вывод в stdout, и нет возможности его прервать: разработчик не предусмотрел такой опции.

Болван wrote:
ExifTool не имеет встроенного текстового или программного механизма, чтобы сказать ему: «Отмени текущую команду -execute, но сам не умирай».

В официальной документации Image::ExifTool и в описании параметров -stay_open логика стейт-машины прописана однозначно. Когда вы отправляете маркер -execute, ExifTool заходит во внутренний синхронный цикл (написанный на Perl). Пока этот цикл парсит битый или тяжелый файл, процесс физически не читает stdin. Вы можете слать туда любые команды отмены — они просто будут копиться в буфере операционной системы. ExifTool увидит их только тогда, когда закончит текущую операцию (то есть когда отменять будет уже нечего)

Пока вывод не будет закончен, нет возможности показать другие подсказки. Визуально это выглядит так:

 Hidden text


Пришлось придумать что-то другое. Получилось где-то так:

 Hidden text


Прикольно, конечно, но все-равно приходится ждать. Но это лучше, чем повисший интерфейс. Если бы была возможность остановить ненужный вывод, было бы еще лучше.

Переменные, которые управляют режимами
Code:
Local gExifBusyHint = 1, gExifTimeOutHint = 1

Если оставить нули
Code:
Local gExifBusyHint = 0, gExifTimeOutHint = 0

То подсказка будет стандартная тоталовская, но за счет Sleep(10) дает возможность откликаться интерфейсу при зависании

 Hidden text


Переменная gExifFixAnsi включает преобразование кракозябр после первой ":", gExifConverseAnsi включает преобразование utf8 символов в ansi после первой ":"

Обновленные функции (остальные были выше)

 Hidden text

 Hidden text


Добавлено спустя 3 минуты:

AkulaBig wrote:
Интересно, умеет ли Авторан запускать именованный экземпляр?

Можно спросить у болвана, умеет ли это делать AutoHotKey v2. Если да, то и Autorun тоже с большой долей вероятности.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group