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 ... , 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
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Fri May 30, 2025 13:57    Post subject: Reply with quote

Loopback wrote:
Как иначе объяснить такое поведение я не знаю.

Спасибо за объяснение в любом случае.
Loopback wrote:
Там много лет ничего практически не менялось. Перед релизом надо будет обновить, конечно.

Да. Видимо, меня память подвела. Кстати, у меня осталась старая версия 2.2.10 и 2.2.11 в прошлогоднем архиве, изменений там действительно никаких, если не считать, что в новом autorun.example.cfg убраны ключи /EV. Выходит, я просто подзабыл содержимое этого файла и что в нём были такие строки:
Code:
# The block below sets COMMANDER_PROGRAM environment variable
# to corresponding TC executable path depending on it's architecture
# Блок ниже устанавливает в переменную окружения COMMANDER_PROGRAM
# путь к исполняемому файлу TC в зависимости от его архитектуры
If %AUTORUN_TCARCH% = 32 Then
  SetEnv /EV COMMANDER_PROGRAM %COMMANDER_PATH%\TOTALCMD.EXE
Else
  SetEnv /EV COMMANDER_PROGRAM %COMMANDER_PATH%\TOTALCMD64.EXE
EndIf
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Mon Jun 02, 2025 14:28    Post subject: Reply with quote

Loopback wrote:
Да и наличие DllCall теперь избавляет о необходимости делать мелкие функции с одним-двумя вызовами системных функций.

И вот отличная иллюстрация к данным словам )

 Hidden text

Создание окна прогресс-бара и имитация активности. Практически рабочий вариант, нужно только оконную фуцнкцию повесить через объект Callback, но у меня не получилось. Пример в справке рабочий:

 Hidden text

Но список типов параметров функции Callback, перечисленных через ";", похоже, работает только с двумя параметрами. Если их больше, то появляется сообщение об ошибке. Баг?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Mon Jun 02, 2025 22:48    Post subject: Reply with quote

Orion9 wrote:
Но список типов параметров функции Callback, перечисленных через ";", похоже, работает только с двумя параметрами. Если их больше, то появляется сообщение об ошибке. Баг?

Да, и похоже он тут даже не один. Обойти не получится, только исправлять.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Tue Jun 03, 2025 13:56    Post subject: Reply with quote

Loopback wrote:
Обойти не получится, только исправлять.

Это не срочно, но хотелось бы попробовать.

Как я понял, сделать можно будет так:
Code:
Global oWP = Callback("TestWinProc", "hwnd;uint;wparam;lparam")

Func TestWinProc(hWnd, uMsg, wParam, lParam)
    If uMsg = 0x0010 Then
       MsgBox("Exit")
       Return 0
    EndIf
    Return DllCall("DefWindowProcA", "hwnd", hWnd, "uint", uMsg, "wparam", wParam, "lparam", lParam)
EndFunc
...
...
hWnd = DllCall("CreateWindowExA", _
...
...           )
DllCall("SetWindowLongPtrA", "hwnd", hWnd, "int", -4, "long_ptr", oWP.Ptr)

Или нет?

Попробовал сменить стиль окна сразу после его создания. Вызов с SetWindowLongPtrA не работает:
Code:
MsgBox(DllCall("SetWindowLongPtrA", "hwnd", hWnd, "int", -16, "long_ptr", 0x10C00000))

Hо работает SetWindowLongA
Code:
MsgBox(DllCall("SetWindowLongA", "hwnd", hWnd, "int", -16, "long", 0x10C00000))

Autorun тут ни при чём?
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 329

Post (Separately) Posted: Tue Jun 03, 2025 15:26    Post subject: Reply with quote

Orion9
Мы с вами обсуждали проблемы uchardet при распознавании кодировок. Сегодня на ру-борде скрипт AkekPad для распознавания кодировок вспомнили. Посмотрите, не может-ли он нам быть полезным:
 AutoScript-DetectEx.js
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Tue Jun 03, 2025 15:45    Post subject: Reply with quote

Orion9 wrote:
Как я понял, сделать можно будет так:

Да, примерно так.

Orion9 wrote:
Autorun тут ни при чём?

Нет, SetWindowLongPtr работает только в x64, в 32-битной используется SetWindowLong. Придется как-то так писать DllCall("SetWindowLong" & (auX64 ? "PtrA" : "A"), ...) .
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Wed Jun 04, 2025 00:34    Post subject: Reply with quote

AkulaBig wrote:
Посмотрите, не может-ли он нам быть полезным:

Такие скрипты за пределами моих возможностей, но одно мне не понятно: зачем нужен данный скрипт, если AkelPad и без него нормально детектит кодировки? Да, возможно, не все, но с русскими он неплохо справляется, а другого мне не нужно. Как говорил Остап Бендер "Другие кодировки мне тоже интересны, но меньше" )

Ждать чуда от детекта UTF-16, видимо, не стоит. Парав был CaptainFlint Если бы это было так просто, рабочие решения давно бы уже лежали на поверхности. Одлнако даже у uchardet с UTF-16 есть проблемы.

И все же AkelPad его как-то детектит. Чтобы в этом убедиться, достаточно просто сохранить любой русский текст в блокноте как UTF-16 BE и убрать маркер бом из полученного файла. AkelPad нормально откроет это файл и внизу напишет (UTF-16 BE) без BOM.
Loopback wrote:
Придется как-то так писать DllCall("SetWindowLong" & (auX64 ? "PtrA" : "A"), ...)

Да, так работает. Я уже понял, что нужно глубже курить WinAPI, но как и известно, курение - это яд ) Дело это интересное и увлекательное, но, к сожалению, трудоемкое и времязатратное. Но раз уж Autorun даёт такую возможность, нужно уметь ей пользоваться, особенно если это помогает добиться нужного результата. Вот еще пример использования:
 Hidden text

Это очень простенький вариант, а вот посложнее:
 Hidden text

Подробнее:
https://learn.microsoft.com/en-us/windows/win32/Controls/task-dialogs-overview
Loopback, может сделать в Autorun вызов такого диалога в дополнение к стандартному MsgBox? Тут и прогресс-бар имеется, и другие плюшки.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Wed Jun 04, 2025 12:14    Post subject: Reply with quote

Orion9 wrote:
может сделать в Autorun вызов такого диалога в дополнение к стандартному MsgBox

Занятная штука. Вот только сомневаюсь, что польза будет соразмерна затраченным на реализацию усилиям. Причем тут сложность не столько в самой реализации, сколько в том, чтобы сделать удобный интерфейс для всего этого разнообразия. Это обычно отнимает едва ли не больше времени, чем сама реализация. В общем занесу в todo на "подумать", но это вещь далеко не первой необходимости.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Wed Jun 04, 2025 14:03    Post subject: Reply with quote

Loopback
Какие-то части этого диалога точно бы пригодились. На сайте microsoft показаны все элементы сразу, но по факту можно использовать лишь малую их часть.

От простых и стандартных кнопок похожих на MsgBox:


И кастомных кнопок с футером и линком:





До радиокнопок и чекбокса:


Вот последний точно не помешал бы. А на счёт прогресс-бара не уверен, без оконной функции потестировать TaskDialogIndirect как следует пока не получилось. Кстати, попробовал вставить вызов диалога TaskDialog в самое начало autorun.cfg. Как и ожидалось, TC x64 закрывает это окно при старте. Шутки от маэстро, или очередные приколы от Lazarus? )
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Wed Jun 04, 2025 23:01    Post subject: Reply with quote

Orion9 wrote:
Как и ожидалось, TC x64 закрывает это окно при старте. Шутки от маэстро, или очередные приколы от Lazarus? )

Это всё та же проблема. При запуске иногда приходит сообщение WM_COMMAND с IDCANCEL. Любой майкрософтовский диалог, открытый в этот момент его ловит и воспринимает как нажатие "Отмена" или ESC.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Thu Jun 05, 2025 14:02    Post subject: Reply with quote

Loopback
Не похоже, что это Гислер так шутит. Скорее очередной прикол "ленивого" Lazarus. Поставил Sleep 1000 перед диалогом - проблема больше не появляется. К MsgBox тоже относится.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 772

Post (Separately) Posted: Sun Jun 08, 2025 00:38    Post subject: Reply with quote

Loopback
Может TCx64 так пытается предотвратить взаимную блокировку? Верится с трудом, но должно быть какое-то объяснение феномену.

Оказывается, в ТСх86 инстанс тоже может поменяться в ходе выполнения. Например, если отключить главную панель инструментов, а затем снова ее включить, то инстанс панели станет другим. Видимо, объясняется это тем, что при старте ТС главная панель - это TButtonBar1, а вертикальная - TButtonBar2. При скрытии главной панели, окно ТС обновляется и вертикальная панель становится TButtonBar1. При повторном включении, главная панель становится TButtonBar2.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Mon Jun 09, 2025 12:03    Post subject: Reply with quote

Orion9 wrote:
Может TCx64 так пытается предотвратить взаимную блокировку? Верится с трудом, но должно быть какое-то объяснение феномену.

Верится с трудом, вот именно. Не представляю, как сюда блокировку притянуть.

Orion9 wrote:
Оказывается, в ТСх86 инстанс тоже может поменяться в ходе выполнения.

Значит, тотал при отключении панели удаляет её. А когда потом создаёт повторно - она в списке контролов оказывается уже после вертикальной, и при поиске TButtonBar находится второй. Экземпляр контрола штука не всегда надёжная. Он постоянен только тогда, когда количество созданных контролов в процессе работы не изменяется, т.е. они не удаляются и не создаются новые.

В Лазарусе к этому добавляется ещё и проблема растянутости формирования окна во времени. Т.е. номер экземпляра контрола в момент отображения формы может отличаться от номера того же контрола через, скажем, 100мс.

Так что оконная автоматизация с использованием экземпляров должна быть последним решением, только когда других вариантов не остаётся. Для получения хэндлов элементов главного окна лучше пользоваться RequestInfo.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 329

Post (Separately) Posted: Mon Jun 09, 2025 16:59    Post subject: Reply with quote

Не понятная ситуация какая-то. Возникает ошибка после установки некоторых плагинов ТС. Пытаюсь перезагрузится сразу после установки плагина, появляется ошибка при нажатии на кнопку перезагрузки:

 Restart.aucfg

Но не всех плагинах так. Из простых архивах вообще все нормально перезагружается.
Подождал некоторое время. Вроде перезагрузился. Похоже надо WAIT прописать. А как в этой записи правильно WAIT подставить? Я до сих пор не могу понять правильный синтаксис.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Mon Jun 09, 2025 21:41    Post subject: Reply with quote

AkulaBig wrote:
Не понятная ситуация какая-то

Такое сообщение может появиться только в одном случае - если в момент нажатия по какой-то причине ещё не выполнилась RegisterCommand, которая регистрирует эту команду (скрипт не выполнился, или был прерван). Может тотал выгружает Autorun при установке плагинов? В этом случае Autorun не загрузится снова, пока его не дёрнет цветовая схема, если в этот момент нажать кнопку - будет ошибка. Очень похоже на наблюдаемое поведение.

AkulaBig wrote:
Похоже надо WAIT прописать.

Прописать где и зачем?
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 ... , 189, 190, 191  Next
Page 190 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