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 ... , 213, 214, 215  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: 943

Post (Separately) Posted: Wed Nov 12, 2025 13:27    Post subject: Reply with quote

Только не сбивайте мне вайб, у меня маза пошла, иду на рекорд Mr. Green

Титаник и Леон лежат ровно, чего не скажешь о бэкапах ТС - их словно пробили на перфокарте )

 Hidden text


Шутки шутками, а я нашёл серьёзный косяк. Не учёл, что панель может изменяться не только при перетаскивании кнопок, но и при обычных операциях копирования и вставки. Соответственно, индекс нарушался. Внёс небольшие изменения, а также добавил ключ "/R", который забыл в прошлый раз добавить.
 Bars.aucfg

И хотя всё работает, от глюков по-прежнему гарантий нет. Так что делайте резервные копии, если будете пользоваться. А мы тем временем еще раз продемонстрируем Гислеру как происходит "случайное" перетаскивание кнопок на главной панели инструментов:

 Hidden text


Ладно, пора заканчивать этот кордебалет. Осталось только бандл завернуть, и в общем-то для этого всё уже почти готово.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1646

Post (Separately) Posted: Wed Nov 12, 2025 13:28    Post subject: Reply with quote

Orion9 wrote:
Касаемо Autorun, не совсем понятно, что именно происходит при запуске длительных операций из нескольких кнопок. Как осуществляется многозадачность? Тоталу отсылается номер зарегистрированной команды и адрес привязанной функции, а он уже сам дальше ее крутит? Крутит в своем отдельно созданном для этого потоке?

Многозадачности тут нет. Когда тотал выполняет команду из кнопки, он посылает сообщение WM_USER + 51 с помощью PostMessage, которое перехватывает хук, устанавливаемый Autorun. Если переданный номер команды зарегистрирован, то управление передается скриптовой функции, если нет - передается дальше тоталу.

Всё это происходит в основном потоке тотала, поэтому надолго блокировать его не стоит. Длительные задачи лучше запускать отдельным потоком с помощью RunThread.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 943

Post (Separately) Posted: Wed Nov 12, 2025 14:03    Post subject: Reply with quote

Ну всё, не выйдет из меня рекордсмена Mr. Green Такой шанс упустил )

Loopback
Спасибо за объяснение. Будем юзать потоки, и Autorun будем юзать. Ведь Autorun - это сила, движение и жизнь Mr. Green

 Hidden text
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 943

Post (Separately) Posted: Wed Nov 12, 2025 20:10    Post subject: Reply with quote

Если Autorun не скриптовый язык, то на чём тогда 11,000 строк написано? Mr. Green
https://www.upload.ee/files/18792409/TC.11.51.7z.html

P.S. Описания на последний функционал, к сожалению, нет. Всё есть на последних страницах темы и чуть далее, если кому-то будет нужно.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 457

Post (Separately) Posted: Wed Nov 12, 2025 20:35    Post subject: Reply with quote

Orion9
ТС хотелось-бы последней версии увидеть. Вдруг от этого будет что-то зависеть.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 943

Post (Separately) Posted: Thu Nov 13, 2025 00:38    Post subject: Reply with quote

AkulaBig
А что там может зависеть? Последние версии ТС это тупо обновления rar, 7z и кодеков.

Ну ладно, про кодеки шучу, но у маэстро реальный авторский блок и застой идей. Я уже писал об этом год назад. А потому спасение утопающих - дело рук самих утопающих. Autorun дает всю полноту спектра действий, что говорится Гислеру и не снилось. Это ж надо было так положить всю Виндузу к ногам ТС, на такое способен только настощий мастер - Loopback.

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



Joined: 03 Dec 2008
Posts: 457

Post (Separately) Posted: Thu Nov 13, 2025 07:35    Post subject: Reply with quote

Orion9 wrote:
А что там может зависеть?

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



Joined: 01 Jan 2024
Posts: 943

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

AkulaBig
ТС х64 в конексте Autorun это отдельная песня, вы же знаете. Поэтому могут быть косяки, и наверняка они есть.

Я, если честно, даже не проверил (не успел просто) работоспособность сборки в х64, и, видимо, напрасно. Сейчас запустил и сразу же заметил, что функционал CapsLock сломан. Поскольку конфиг autorun.cfg остался в сборке старый, в нем отсутствует последние мелкие изменения, но одно из них критичное - ключ /S на CapsLock и возврат кода -1 в привязанной функции:
Code:
SetHotkeyAction /S /V:20   JoinHintLock 1
SetHotkeyAction /V:20 /K:S JoinHintLock 2
SetHotkeyAction /V:20 /K:C JoinHintLock 3
SetHotkeyAction /V:20 /K:A JoinHintLock 4

Func JoinHintLock(lParam)
    If MediaInfoLock > 0 Then
       MediaInfoLock = 0
    Else
       MediaInfoLock = 1
    Endif 
    If lParam = 2 Then MediaInfoLock = 2
    If lParam = 3 Then MediaInfoLock = 3
    If lParam = 4 Then MediaInfoLock = 4   
    Return -1
EndFunc

В секцию финализации, пожалуй, тоже можно добавить
Code:
If gHBarWndProc > 0 Then
    DllCall("SetWindowLong" & (auX64 ? "PtrW" : "W"), _
            "hwnd", hBarWnd, "int", -4, "long_ptr", gHBarWndProc, "ptr")
EndIf

чтобы х64 не крашился при закрытии (хоть и через раз, но помогает).

Забыл еще путь к exiftool поменять в модуле MediaInfo. Без него переключение подсказки по Alt+F12 не срабатывает, и непонятно сразу в чем проблема.
Code:
Global gMediaExifX32 = COMMANDER_PATH & "\Tools\ExifTool\exiftool.exe"

В общем, признаю - фиговенько бандл завернул Smile Многие интересные вещи забыл, например добавить монитор каталога в планировщик, которым я в действительности пользуюсь:
 Title\Config.ini

Хайлайтер от yozhik забыл обновить. Да там копни - много чего можно обнаружить, но перезаливать из-за этого пока не буду. Основная цель ведь не предоставить готовый функционал как таковой, а обменяться идеями.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 943

Post (Separately) Posted: Thu Nov 13, 2025 21:21    Post subject: Reply with quote

AkulaBig
Все-таки перезалил с последней версией ТС.
Может и будет что-то не рвботать, но главное, что все скрипты собраны в одном месте.

Хотел было и другие компоненты обновить, типа ExifTool и MediaInfo.dll, но подумал что нет смысла.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 457

Post (Separately) Posted: Sun Nov 16, 2025 13:55    Post subject: Reply with quote

Orion9 wrote:
AkulaBig
Все-таки перезалил с последней версией ТС.

Ну и правильно. А то кто-нибудь да напишет, что у него не работает, что работает у вас.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 943

Post (Separately) Posted: Mon Nov 17, 2025 00:42    Post subject: Reply with quote

AkulaBig
Сломанный Capslock был реальныи зашкваром, оставлять в таком виде было нельзя. А так, мне кажется, большой разницы между ТС 11.51 и ТС 11.56 нет, всё работает и там, и там.

Loopback
Вызов работает
Code:
DllCall("GetVolumeInformationW", _
"wstr", sDrive, "wstr:256", @sName, "dword", 512, "ptr", 0, "ptr", 0, "ptr", 0, "wstr:256", @sFS, "dword", 512)

Если сравнивать эти два вызова
Code:
Static nam = Buffer(512), fs = Buffer(512)
nam.Zero()
fs.Zero()       
DllCall("GetVolumeInformationW", _
        "wstr", sDrive, "ptr", nam.ptr, "dword", 512, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", fs.ptr, "dword", 512)
sName = nam.GetStr()
sFS = fs.GetStr()

они полностью эквивалентны?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 943

Post (Separately) Posted: Fri Nov 28, 2025 14:08    Post subject: Reply with quote

Autorun большая плюшка
Раз, два, три и есть менюшка )

 Drives.aucfg

Функция перечисления дисков была реализована еще в модуле Torrents.aucfg, но не пропадать же добру напрасно? Решил, что можно развить эту тему и придать функции вторую жизнь.

Меню отображает логические диски с расширенной информацией о размере и занятом пространстве. Вызов с CTRL добавляет полосу для графического представления, но полоса не является графическим объектом (обычный юникодный символ), поэтому смотрится так себе.

Меня больше привлекла возможность использовать это меню в полноэкранном режиме, вызывая его, например, кликом рядом с вкладками или горячей клавишей, но можно использовать и по-другому. Выбор пункта открывает корень диска. Удержание CTRL - текущий каталог на диске.

Есть у меня террабайтный диск, которому больше 10 лет. Большую часть времени он просто спит. Но в последнее время стал просыпаться медленно, и если вызвать меню в этот момент, то оно может не сразу появиться.

Похоже, это происходит из-за подсчета места в корзине, пришлось добавить еще один модификатор Shift. Вызов меню с Shift не вызывает функцию RecycleBinInfo, которая получает сведения о корзине.

В общем, меню пока очень и очень эксперементальное. Над новыми пунктами и функционалом еще можно подумать.

Loopback
Пока я оставил оба варианта в коде, как вы можете видеть. Вопрос больше связан с примером в справке:
Code:
Local sysdir
DllCall("GetSystemDirectoryW", "wstr:256", @sysdir, "int", 255)

Почему используется int 255 и какой размер буфера создает wstr:256?

Еще вопрос. ControlSetMouseAction /R 15 DrivesMenu, получается, кликает по кнопкам [\] и [..], можно сделать, чтобы эти кнопки не попадали в индекс 15?

P.S.

Лень все-таки была побеждена, и сводка по зарегистрированным командам родилась.

 Hidden text

Регулярные выражения, конечно, значительно упростили задачу, спасибо за функционал. Само меню выглядит так:
 Hidden text

Неактивные пункты значит команда находится не в начале строки и скорее всего закомментирована или ее имя просто упоминается где-то в переменных или функциях.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 943

Post (Separately) Posted: Sat Nov 29, 2025 00:41    Post subject: Reply with quote

Loopback
После внесения последних изменений заметил косяк неприятный. Вот так в ТС х64 не работает:
 Hidden text

А вот так работает:
 Hidden text

Но не просто работает или не работает (если бы так), все, что идет за директивой Pragma Include %COMMANDER_PATH%\Ini\Scripts\Drives.aucfg в основном конфиге не загружается и не обрабатывается. Так я и заметил сначала - нажал на кнопку, а в ответ сообщение, что функция с кодом не зарегистрирована. Такое может прозойти только, если модуль не был подключен, а значит Autorun его не подключил. При выходе мелькает какое-то окно, возможно окно Autorun с ошибкой.

Вообше-то, я хотел повесить оконную функцию на контрол с классом Window:10 для удобства, чтобы не только на строке вкладок можно было вызыввать меню. Есть шанс исправить?

Ранее забыл написать. Если использовать ключ /D в расширенно меню, то ShowPopupMenu без /I:0 создает серый квадрат у неактивных пунктов, если у них нет значка. С этим можно что-то сделать?

А еще в такой записи
Code:
mnu = 'MENUITEM "' & cmd & '", em_aucmd -1 ClipPut %"gRegCmdName"'
ClipPut работает только с глобальной переменной, так и задумано? Кстати, и глобальную переменную с большим текстом такая запись, кажется, режет.

P.S.

Регулярные выражения безусловно добавили прыти. Недавно yozhik писал, что возникаект задача скачать и обработать несколько файлов с интернета, и теперь когда регулярные выражения есть, остается закачать файлы. Самый простой способ сделать всего один вызов к Urlmon.dll\URLDownloadToFileW. Метод имеет недостатки, но для небольших файлов вполне подходит. Простой пример на загрузке и парсинге rss-ленты
 Hidden text

Функция при всей простоте имеет недостатки: не все адреса могут открыться, а также отсутствует гибкая обработка ошибок. К тому же, если файл довольно большой, будет заметное зависание.

Поэтому пришлось сделать еще одну функцию на основе Wininet.dll. В принципе, она уже готова, осталось только оформить все с примерами. Вероятно завтра доделаю.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1646

Post (Separately) Posted: Sat Nov 29, 2025 12:29    Post subject: Reply with quote

Orion9 wrote:
они полностью эквивалентны

Параметры размера принимают значение в TCHAR, а не байтах, т.е. должно тоже быть 256. В остальном вроде равноценны.

Orion9 wrote:
Почему используется int 255 и какой размер буфера создает wstr:256?

Создаёт с указанным размером, 256. Размер 255 просто чтобы записанная строка гарантированно завершалось нулем.

Orion9 wrote:
чтобы эти кнопки не попадали в индекс 15?

Нет.

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

Вот и хорошо, и не нужно обвес для статистики городить.

Orion9 wrote:
Есть шанс исправить?

Не знаю, у меня сейчас нет возможности с этим разбираться.

Orion9 wrote:
С этим можно что-то сделать?

Без кастомной отрисовки нет.

Orion9 wrote:
так и задумано? Кстати, и глобальную переменную с большим текстом такая запись, кажется, режет.

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


@All
В силу обстоятельств я не смогу отвечать на форуме какое-то время. Отвечу, когда появится такая возможность.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 943

Post (Separately) Posted: Sat Nov 29, 2025 13:59    Post subject: Reply with quote

Loopback
Мне стоило спросить это у "ЫЫ", обычно он хорошо отвечает на такие вопросы. Просто взялся сейчас за многое сразу, не хотел отвлекаться. В частности долго возился с winnet, даже устал как-то. Но в целом оно того стоило.

Сначала думал, что функции URLDownloadToFile хватит для потребностей, и её хватило бы, если бы не один серьёзный недостаток - не все адреса открывает.

Например, такой адрес она не открывает и пишет ошибку INET_E_DATA_NOT_AVAILABLE:
 Hidden text

Решения, как обойти проблему, мне найти не удалось. А ведь хочется узнать как там у маэстро погода в горах ) Поэтому и пришлось заморочиться Wininet.dll.

И всё работает. Я чуть позже сброшу код, но картинку уже отснял:
 Hidden text

 Hidden text
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 ... , 213, 214, 215  Next
Page 214 of 215

 
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