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 

Autorun
Goto page Previous  1, 2, 3 ... 188, 189, 190, 191  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Wed May 28, 2025 23:28    Post subject: Reply with quote

Orion9 wrote:
умение Autorun каким-то образом сообщать статус долгих операций

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

AkulaBig wrote:
В DllCall не работает:

Присвоил переменной util_MI путь к библиотеке - далее всё работает.
Проверяйте тщательно, что в util_MI. Может dll другой битности (скорее всего) или малозаметная ошибка какая.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 328

Post (Separately) Posted: Wed May 28, 2025 23:47    Post subject: Reply with quote

Loopback wrote:
роверяйте тщательно, что в util_MI

Вроде все сто раз посмотрел. Тогда-бы и в TCMediaInfo не работало.
Вот так у меня:
Code:
If AUTORUN_TCARCH = 32 Then
   SetEnv /EV util_MI %COMMANDER_PATH%\Utilities\MediaInfo\MediaInfo.dll
Else
   SetEnv /EV util_MI %COMMANDER_PATH%\Utilities\MediaInfo\MediaInfo_x64.dll
EndIf

Вот так давно работает:
Code:
   Static sLib = "MediaInfo" & (auX64 ? "_x64" : "") & ".dll"
   Static hLib = DllCall("LoadLibrary", _
         "wstr", COMMANDER_PATH & "\Utilities\MediaInfo\" & sLib, _
         "ptr")
   If hLib = 0 Then
      Return "Error LoadLibrary " & sLib
   EndIf

Так что надо именно через SetEnv.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Thu May 29, 2025 00:07    Post subject: Reply with quote

Loopback wrote:
Можно в заголовок, можно подсказкой, можно еще как-нибудь.

Вот о "еще как-нибуть" как раз и речь )

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

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

AkulaBig
Code:
SetEnv /EV util_MI %COMMANDER_PATH%\Utilities\MediaInfo\MediaInfo.dll

А зачем /EV и почему кавычек в пути нет?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Thu May 29, 2025 00:32    Post subject: Reply with quote

AkulaBig wrote:
Так что надо именно через SetEnv.

Проверил через SetEnv, работает всё равно.

Orion9 wrote:
А зачем /EV и почему кавычек в пути нет?

/EV у многих кочует с древних времен, сейчас он просто ничего не делает. Лучше убирать, чтобы не засорять код.

Без кавычек в командной записи можно, если пробелов нет.

Orion9 wrote:
По идеи нужна отдельная форма или панель для отрисовки прогресса и вывода сообщений

Ну может быть когда-нибудь в Tweaks можно будет засунуть что-то простенькое типа ProgressOn/ProgressSet из Autoit. Не более того и точно не в первую очередь.

С треем и так есть рабочие несложные примеры.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 328

Post (Separately) Posted: Thu May 29, 2025 05:04    Post subject: Reply with quote

Orion9 wrote:
По идеи нужна отдельная форма или панель для отрисовки прогресса и вывода сообщений, как это сделано, например, в TCIMG

Приятно, что вы изменили свое мнение о TCIMG. Я вообще не представляю свою жизнь без прогресс-бара TCIMG. Он стоит вторым пунктом, почему я пользуюсь TCIMG. Первым моя кнопка ПИ.
Orion9 wrote:
А зачем /EV и почему кавычек в пути нет?

Loopback wrote:
/EV у многих кочует с древних времен, сейчас он просто ничего не делает.

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

Понял, уберу.
Loopback wrote:
Без кавычек в командной записи можно, если пробелов нет.

Хм. Жестко тестил свою сборку на кавычки именно с путями с пробелами, причем вложенными. От вложенности тоже зависит. Эти записи работали. Ладно, попробую еще раз потестить. Может именно в этом причина.

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

Так, условия немного изменились. Когда не загружается сама библиотека, сообщение о ошибке свое. Это как-раз если перепутаны разрядность или неправильный путь.
А сейчас вот эту выдает ошибку:
Code:
      Local hMI = DllCall(sLib & "\MediaInfo_New", "ptr")
      If hMI = 0 Then
         Return "MediaInfo_New returned 0"
      Endif

То-есть не может создать дескриптор. Получается при использовании переменной формат записи должен быть другой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Thu May 29, 2025 12:23    Post subject: Reply with quote

AkulaBig wrote:
Жестко тестил свою сборку на кавычки именно с путями с пробелами, причем вложенными. От вложенности тоже зависит. Эти записи работали. Ладно, попробую еще раз потестить. Может именно в этом причина.

Имелось в виду, что в командной записи так можно без кавычек

SetEnv util_MI %COMMANDER_PATH%\Utilities\MediaInfo\MediaInfo.dll

а так, например, нельзя:

SetEnv util_MI %COMMANDER_PATH%\My Utilities\MediaInfo\MediaInfo.dll

Во втором случае надо окавычивать.

Если пробелы появляются из переменной окружения, то это уже не будет проблемой.

Но в принципе, я бы советовал кавычки для строк использовать всегда.

AkulaBig wrote:
А сейчас вот эту выдает ошибку:

Да, а вот тут действительно есть баг в DllCall с обработкой полного пути dll. Исправлю, а пока можно решить, просто передавая имя модуля без полного пути:

Code:
    Static sLib = util_MI
    Local sLibName = FileGetName(util_MI)

    ...

    Local hMI = DllCall(sLibName & "\MediaInfo_New", "ptr")
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Thu May 29, 2025 12:47    Post subject: Reply with quote

Гы-гы...) Если в примере со значком заменить инстансы на 6 и 10:
Code:
    Local hWnd = WinFind(AUTORUN_TCHANDLE, _
                        (AUTORUN_TCARCH = 32 ? "TMyPanel" : "Window"), _
                        (AUTORUN_TCARCH = 32 ? 6 : 10))

И добавить пикселей до 16:
Code:
    DllCall("DrawIconEx", _
                   "ptr", hDC, _
                   "int", w - 20, _
                   "int", 1, _
                   "ptr", hIco, _
                   "int", 16, _
                   "int", 16,  _
                   "uint", 0, _
                   "ptr", 0,  _
                   "uint", 0x0003)

То "пропеллер" будет вращаться над панелью, что, на мой взгляд, смотрится ещё лучше и интереснее. Но... С 64-битном ТС не всё так однозначно. Loopback, хочу у вас спросить: он что, инстансы динамически нумерует? Shocked Вот те' раз... Однако.) А что же делать тогда? Как определять контрол?

Loopback wrote:
/EV у многих кочует с древних времен, сейчас он просто ничего не делает. Лучше убирать, чтобы не засорять код.

Да, вспомнил. Было такое уже.
Loopback wrote:
Без кавычек в командной записи можно, если пробелов нет.

Т.е. переменная %COMMANDER_PATH% раскрывается и работает даже с пробелами? Не знал о таком. Думал, что кавычки обязательны, или по крайней мере желательны.
Loopback wrote:
Ну может быть когда-нибудь в Tweaks можно будет засунуть что-то простенькое типа ProgressOn/ProgressSet из Autoit.

Как ни посмотри, а иметь что-то нужно для таких задач. Вы, например, в последних версиях вставили симпатичную формочку сообщающую об ошибках Autorun, лучше же стало намного.
AkulaBig wrote:
Приятно, что вы изменили свое мнение о TCIMG.

Разве? ) Не так давно я действительно сравнивал эти две утилиты, но с тех пор ничего не изменялось. Это два похожих, но разноплановых инструмента. Оба пригодятся в хозяйстве, но для разных задач. Например, с помощью TCIMG вы не сможете создавать и изменять переменные окружения процесса TOTALCMD, и это ограничение ничем не обойти. А в Autorun для этого есть функция SetEnv, которую вы сейчас хотите использовать.
AkulaBig wrote:
Я вообще не представляю свою жизнь без прогресс-бара TCIMG.

Без прогресс-бара я свою жизнь тоже не представляю, но почему этот прогресс-бар должен обязательно быть в TCIMG? )
AkulaBig wrote:
Он стоит вторым пунктом, почему я пользуюсь TCIMG. Первым моя кнопка ПИ.

С высоким приоритетом в целом согласен, у меня возможность вывода удобных сообщений о статусе операции тоже не на последних ролях, поэтому и написал об этом. Странно, что Loopback придаёт этому низкое значение и приоритет.
AkulaBig wrote:
А сейчас вот эту выдает ошибку:

А почему вы хотете использовать переменную окружения для этого? Можно же просто создать глобальную переменную дополнительно для этих целей. У меня сейчас так и сделано практически для всех внешних утилит и каталогов первыми строками основного модуля.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 328

Post (Separately) Posted: Thu May 29, 2025 13:05    Post subject: Reply with quote

Loopback wrote:
а так, например, нельзя

Это конечно понятно. Но тут даже более интересная фича. %COMMANDER_PATH% где-то можно и без кавычек использовать, а где-то нельзя. Я имею ввиду не Autorun. В Autorun как-раз можно без кавычек. Проверено. Но от греха подальше закавычил все.
Loopback wrote:
Да, а вот тут действительно есть баг в DllCall с обработкой полного пути dll.

Ой, хорошо что это не мой косяк. А то я уже волноваться начал Twisted Evil
Loopback wrote:
а пока можно решить

Спасибо, попробую. Кстати, полезное дело я сделал. Помимо выявленного бага еще попутно одну проблемку решил из взаимодействия MI в разных плагинах. Хинты через Autorun отлично подхватывают русский язык. А вот у TCMediaInfo какая-то проблема возникла. Для ее решения пришлось в Autorun вынести подключение языка из функции хинтов в основную. Объяснить трудно. Вот скрины:


Code:
      <source name="G_OverallBitRate" field="OverallBitRate/String"/>

Первый скрин просмотр из MI через TCMI. Второй скрин с подключение языка в Autorun:
Code:
# Установить язык названий параметров
# Set language of parameters
Switch AUTORUN_TCLANG
   Case 'RUS'
      # Имя DLL в зависимости от разрядности TC
      # DLL name depending on discharge TC
      Static sLib = "MediaInfo" & (auX64 ? "_x64" : "") & ".dll"
      # Static sLib = util_MI
   
      # Загрузить DLL
      # Open DLL
      Static hLib = DllCall("LoadLibrary", _
            "wstr", COMMANDER_PATH & "\Utilities\MediaInfo\" & sLib, _
            "ptr")
      If hLib = 0 Then
         Return "Error LoadLibrary " & sLib
      EndIf
   
         # Получить дескриптор DLL
         # Get DLL descriptor
         Local hMI = DllCall(sLib & "\MediaInfo_New", "ptr")
         If hMI = 0 Then
            Return "MediaInfo_New returned 0"
         Endif

      Local lng_MI = _
         "file://" & COMMANDER_PATH & "\Utilities\MediaInfo\ru.csv"
      DllCall(sLib & "\MediaInfo_Option", _
         "ptr", hMI, "wstr", "Language", "wstr", lng_MI, _
         "wstr")

      # Удалить дескриптор DLL
      # Delete DLL descriptor
      DllCall(sLib & "\MediaInfo_Delete", "ptr", hMI)
EndSwitch

Я не думаю, что это глюк.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Thu May 29, 2025 13:18    Post subject: Reply with quote

Orion9 wrote:
он что, инстансы динамически нумерует?

А что такое инстанс? Это просто порядковый номер контрола.

И в x64 есть проблема, что некоторые контролы создаются со значительной задержкой. С этой проблемой сталкивались в ModifyDialog. Autorun пытается найти контрол с определенным экземпляром, но в момент поиска некоторые контролы еще не созданы, в результате получает либо неправильный контрол, либо вообще не может его найти.

Orion9 wrote:
Т.е. переменная %COMMANDER_PATH% раскрывается и работает даже с пробелами?

Да, главное чтобы строку мог прочитать парсер, а пробелы, которые возникнут внутри после раскрытия переменной уже не страшны.

Orion9 wrote:
симпатичную формочку сообщающую об ошибках Autorun, лучше же стало намного.

Ну там было несколько резонов: и в целях лучшей читабельности значений, и возможности поменять шрифт на моноширинный, и лучшая стабильность под х64, и возможность продолжить/прервать скрипт. Прогресс мне представляется намнооого менее полезным и применимым.

Orion9 wrote:
Странно, что Loopback придаёт этому низкое значение и приоритет.

Потому что Autorun не интерактивное графическое приложение, с диалогами, статусными строками и тому подобным. Таким приложением является тотал, а Autorun лишь дополнение к нему.

Orion9 wrote:
Первый скрин просмотр из MI через TCMI.

Каким образом и где производится просмотр?
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 328

Post (Separately) Posted: Thu May 29, 2025 13:29    Post subject: Reply with quote

Loopback wrote:
передавая имя модуля без полного пути

Да, так работает. Но в загрузке библиотеке надо использовать переменную util_MI.

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

Orion9 wrote:
Без прогресс-бара я свою жизнь тоже не представляю, но почему этот прогресс-бар должен обязательно быть в TCIMG? )

Элементарно, Кэп. Потому что его нет в Autorun Laughing Ну и даже если он появится в каком-то простейшем варианте, меня это не устроит. Мне-же надо выводить проценты после определенных шагов операций.
Orion9 wrote:
А почему вы хотете использовать переменную окружения для этого?

Потому что даже в файле autorun.example.cfg именно этот метод показан.

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

Loopback wrote:
Каким образом и где производится просмотр?

Просто запустил просмотр пользовательских колонок, сформированных в плагине TCMediaInfo. Почему-то единицы измерения на английском показывает. А по Ф3 на русском. Вообще не понятно. Наверное мы немного офтопим. Вообще-то это к TCMediaInfo относится. Но мы и не так офтопили. Поэтому сердце мое спокойно Cool С другой стороны проблема TCMediaInfo решается через Autorun. Вроде-бы все по теме.

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

Orion9
Кстати, вы-же забраковали мой набор пользовательских колонок со всеми существующими значениями. А я тут запускал его именно в альбоме каком-нибудь. Нормально смотрится, когда файлы из одного альбома.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Thu May 29, 2025 22:32    Post subject: Reply with quote

AkulaBig wrote:
Почему-то единицы измерения на английском показывает.

Потому что используется поле OverallBitRate/String. Такие поля (уже содержащие единицы) встроенной в плагин системой перевода не переводятся.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 328

Post (Separately) Posted: Thu May 29, 2025 22:39    Post subject: Reply with quote

Loopback wrote:
Такие поля (уже содержащие единицы) встроенной в плагин системой перевода не переводятся.

Значит я прикольную фичу нашел. Если подключить родной язык, все переводится.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Thu May 29, 2025 23:48    Post subject: Reply with quote

Loopback
GetSelectedItems действительно быстрее стала работать, проверил сейчас. Изначально хотел вставить такую строку:
Code:
If GetSelectedItems(3, 0) = '' And GetCurrentItem(3, 2) = 0 Then

Чтобы проверять наличие объекта под курсором, когда на панели ничего не выделено. Иначе ТС выкидывает MessageBox при выполнении команды cm_CopyHdrFileDetailsToClip. Но на больших списках скорости все-равно недостаточно. Поэтому решил, что лучше сначала посылать команду cm_GoToFirstEntry, если под курсором пусто, и только потом делать повторную проверку. Также убрал обнуление массивов, теперь и без этого работает, спасибо за фиксы в новой версии. Ниже последний код функции для подсчета значений в колонках:

 Hidden text

Код, конечно, можно ещё пересматривать и дорабатывать, но сделать пока этого не смогу.
Loopback wrote:
А что такое инстанс? Это просто порядковый номер контрола.

А когда он присваивается, на стадии проектирования или при запуске процесса?

Я думал, это значение постоянное и надежное, и что оно не должно меняться на лету. Autorun тут ни при чём. Я смотрел через Autoit v3 Windows Info. Если в ТС х86 строка состояния левой панели всегда равна TMyPanel5, то в ТС х64 значение инстанса данного элемента меняется прямо на ходу в зависимости от общего числа элементов интерфейса, которые отображаются в окне ТС, т.е. кнопки дисков, выпадающий список дисков, панель инструментов и т.д. Для удобства я использовал TCFS2, чтобы сразу убирать и добавлять по несколько элементов. Строка состояния левой панели при этом болтается как маятник - то Window 7, то Window 6, то опять Window 7, то снова Window 6. Но даже если просто через меню "Настройки" -> "Вид окна" убирать или добавлять компоненты по одной галочке, значение инстанса будет становиться другим, например Window 9 или Window 5, короче, таким, каким ему вздумается. Хочу еще раз отметить: такое происходит только в х64. В обычном 32-битном ТС всё нормально, хотя я не проводил глубоких тестов. Но вы видите у себя такую проблему?
Loopback wrote:
Потому что Autorun не интерактивное графическое приложение, с диалогами, статусными строками и тому подобным.

Ну, вы так расписываете, словно вам действительно ставят задачу сделать из Autorun интерактивное графическое приложение ) На деле лишь просят добавить 1-2 формы для более удобного вывода сообщений и отображения статуса операций. В общем, нужно что-то вроде эквивалента командам infbx и prgrs в TCIMG. Если это возможно сделать, хотелось бы увидить в будущих версиях.
AkulaBig wrote:
Мне-же надо выводить проценты после определенных шагов операций

Ну так сам прогресс-бар и запрос к Loopback как раз об этом.
AkulaBig wrote:
Потому что даже в файле autorun.example.cfg именно этот метод показан.

Да, давненько я не открывал этот файл. Вижу, есть в нём некоторые изменения. А установкой переменных окружения в зависимости от разрядности я тоже пользуюсь, например:

 Hidden text

AkulaBig wrote:
Кстати, вы-же забраковали мой набор пользовательских колонок со всеми существующими значениями. А я тут запускал его именно в альбоме каком-нибудь. Нормально смотрится, когда файлы из одного альбома.

Где же я его забраковал, если я как раз писал, что нормально смотрится только на похожих файлах, например дискографиях исполнителей. А альбомы и есть составная часть дискографий.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Fri May 30, 2025 01:15    Post subject: Reply with quote

Orion9 wrote:
А когда он присваивается, на стадии проектирования или при запуске процесса?

Он не присваивается, он определяется порядком, в котором в макете диалога создаются контролы. Или порядком, в каком они создаются при создании в рантайме. Когда начинается поиск контрола с определенным классом, первый найденный считаем 1, второй - 2 и т.д. Так что можно считать "на стадии проектирования".

Но это в обычных окнах, да и c формами Delphi всё ок. А вот в Lazarus, на котором пишется TC64, что-то странное. Возможно, там есть какой-то механизм "ленивой" загрузки формы, который создает контролы не сразу, а постепенно. Как иначе объяснить такое поведение я не знаю.

Orion9 wrote:
Если это возможно сделать, хотелось бы увидить в будущих версиях.

Ну я же написал, что возможно. Но не сейчас.

Orion9 wrote:
Да, давненько я не открывал этот файл.

Там много лет ничего практически не менялось. Перед релизом надо будет обновить, конечно.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 328

Post (Separately) Posted: Fri May 30, 2025 04:15    Post subject: Reply with quote

Orion9 wrote:
Да, давненько я не открывал этот файл

Я тоже давно. Но смотрел.
Orion9 wrote:
нормально смотрится только на похожих файлах, например дискографиях исполнителей. А альбомы и есть составная часть дискографий.

Ну да.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 188, 189, 190, 191  Next
Page 189 of 191

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group