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 ... 216, 217, 218
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
FallenAngel



Joined: 30 Dec 2025
Posts: 17

Post (Separately) Posted: Fri Feb 06, 2026 13:12    Post subject: Reply with quote

Orion9
TCFS2, точно, спасибо.

Про CompareTool расскажу что хочу. Решение пока не могу придумать. Идея, условно:
if exist WinMergeU.exe then (выполняем как обычно CompareTool=WinMergeU.exe) else (предлагаем скачать перекинув на условный BAT-ник).
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1002

Post (Separately) Posted: Fri Feb 06, 2026 19:13    Post subject: Reply with quote

FallenAngel
А что тут думать? Нужно брать и делать, как вы написали )

Сначала считать ключ CompareTool и проверить путь в его значении: если путь существует, то выполнить cm_CompareFilesByContent, если не существует, то вывести MsgBox с вопросом, нужно ли скачивать WinMerge.

Опционально можно добавить возможность сравнения внутренним инструментом, если пользователь откажется от скачивания.

Небольшой пример:
Code:
RegisterCommand 60050 "CompareTwoFiles"

Func CompareTwoFiles()
    Local sTool
    # чтение ключа   
    sTool = IniRead("~/R", COMMANDER_INI, "Configuration", "CompareTool", 0)
    # раскрытие переменных окружения в значении ключа, если они есть
    sTool = Set(sTool)
    # проверка существования файла   
    If FileExist(sTool) Then
       # файл существует
       # послать команду сравнения и выйти   
       SendCommand(2022)    # cm_CompareFilesByContent
       Return
    EndIf
    # файл не существует   
    MsgBox("Инструмент сравнения не найден " & sTool & auCRLF & auCRLF & _
           "Загрузить из Интернета?", "Autorun", 3+0+48)
    # кнопка "Да" не была нажата, выйти из скрипта             
    If EXTENDED <> 6 Then Return
    # запуск батника для загрузки                 
    ShellExec(COMMANDER_PATH & "\Scripts\WinMergedownload.bat")   
EndFunc

Как у вас со скриптингом, можете дальше развить этот пример, а то я через неделю только освобожусь.

Кстати, вместо батника можно использовать функцию WinInetDownloadFile для загрузки файла прямо из Autorun
Code:
Local url = "https://downloads.sourceforge.net/winmerge/winmerge-2.16.54-x64-exe.zip"
WinInetDownloadFile(url, TEMP & "\winmerge.zip")

WinMerge загрузится во временный каталог в архиве winmerge.zip. Останется распаковать этот архив в нужное место и сообщить пользователю об окончании операции.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 17

Post (Separately) Posted: Sun Feb 08, 2026 11:03    Post subject: Reply with quote

Orion9
Спасибо, работает отлично. Единственное, т.к. сейчас Нет и Отмена делают одно и тоже, то лучше чтобы Нет открывал внутренний инструмент.

Orion9 wrote:

Как у вас со скриптингом

На bat\ps1 я неплохо пишу. Это не проблема.


Orion9 wrote:

Что касается Листера, если задача стоит добиться, чтобы его окно при открытии имело тот же размер и положение


Может тогда лучше упростить? Просто повесить хоткей: нажал - и листер стал размером с окно ТС.


Quote:
Добавил переменную gTitleRound для указания количества знаков после точки у сетевого трафика.


Может тогда и InfoHeader.aucfg обновите с учетом этой новинки?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1002

Post (Separately) Posted: Sun Feb 08, 2026 14:09    Post subject: Reply with quote

FallenAngel
Если у вас со скриптами PowerShell получается работать, то уверен, что и с Autorun получится. Вопрос времени.

Чтобы добавить действие на кнопку "Нет", нужно обработать код с номером 7 в макросе EXTENDED. Из справки Autorun на функцию MsgBox:
Code:
После закрытия диалога сообщения функция присвоит макросу EXTENDED числовой код, идентифицирующий нажатую кнопку:

1 «OK»
2 «Отмена»
3 «Прервать»
4 «Повтор»
5 «Пропустить»
6 «Да»
7 «Нет»
10 «Повторить»
11 «Продолжить»

Возможные сценарии при нажатии клавиши ESC:

Если есть кнопка «Отмена», функция присвоит 2 макросу EXTENDED.
Если нет кнопок «Отмена» и «OK», никакого эффекта не будет.
Если нет кнопки «Отмена», но есть «OK», функция присвоит 1 макросу EXTENDED.
Функция не всегда работает на 64-битной версии Total Commander.

Т.е. нужно добавить:
Code:
# кнопка "Нет"
If EXTENDED = 7 Then SendCommand(2040)    #cm_IntCompareFilesByContent
# кнопка "Да" не была нажата, выйти из скрипта             
If EXTENDED <> 6 Then Return

Кстати, для этой задачи хорошо может подойти MsgBoxLinks, вместо стандартного MsgBox. Но там код чуть сложнее, пока не могу его написать и протестировать. Позднее попробую.

Quote:
Может тогда лучше упростить? Просто повесить хоткей: нажал - и листер стал размером с окно ТС.

Можно так сделать. Нужно зарегистрировать отдельный код на функцию SyncListerPosition и создать для него em_команду или сразу повесить функцию на хоткей.
Code:
RegisterCommand 60051 "SyncListerPosition"
# Alt + "["
SetHotkeyAction /K:A /V:219 SyncListerPosition

Func SyncListerPosition()
    Static c = 0
    If IniRead("~/R", COMMANDER_INI, "Lister", "Maximized", 0) = 0 Then
        WinGetPos("x", "y", "w", "h")
        IniWrite("~/R", COMMANDER_INI, "Lister", "x", x)
        IniWrite("~/R", COMMANDER_INI, "Lister", "y", y)
        IniWrite("~/R", COMMANDER_INI, "Lister", "dx", w)
        IniWrite("~/R", COMMANDER_INI, "Lister", "dy", h)
        c += 4
        #ShowHint("Запись ключей: " & c, SYSINFO_DESKTOPWIDTH/2-50, SYSINFO_DESKTOPHEIGHT/2, 1000, 1)
    EndIf
EndFunc

Посмотрите в справочнике SetHotkeyAction.
Quote:
Может тогда и InfoHeader.aucfg обновите с учетом этой новинки?

Так он уже обновлен в последней версии на предыдущей странице, пропустили? Smile
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 17

Post (Separately) Posted: Sun Feb 08, 2026 20:32    Post subject: Reply with quote

Orion9 wrote:

c += 4

Наверное, нужно обнулять, т.к. сейчас КАЖДЫЙ раз +4

Orion9 wrote:
Так он уже обновлен в последней версии на предыдущей странице, пропустили? Smile

Там он вместе с погодой (ну или я не туда смотрю). Речь про оригинал по моей ссылке в 68 строк.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1002

Post (Separately) Posted: Mon Feb 09, 2026 00:33    Post subject: Reply with quote

FallenAngel
c += 4 не обнуляется, потому что цель была увидеть общее количество записей в ини-файл. Подключите последний модуль, захватите окно за заголовок и поводите им по экрану — количество записей быстро перевалит за сотни. Я боялся, что будет еще больше. Хотя в принципе все это не страшно.

Quote:
Там он вместе с погодой (ну или я не туда смотрю).

Так вы и хотели вроде с погодой, даже ссылку давали на github Smile Но если хотите совсем уж легковесный заголовок, то переменную для окруления десятичных можно и не вводить. Сразу лучше в строку вывода внести изменения:
Code:
 gInfoHeader = gTitle & '        ' & Date("d MMMM, ddd") & '.    CPU: ' & StrFormat("%02d", GetCPUUsage()) & '%    RAM: ' & GetMemStats() & '%    NET: ↓ ' & Round(nRecvSpeed / 1000, 2) & '  ↑ ' & Round(nSendSpeed / 1000, 2) & ' mb/s'

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



Joined: 01 Jan 2024
Posts: 1002

Post (Separately) Posted: Mon Feb 09, 2026 12:17    Post subject: Reply with quote

FallenAngel
Вчера спешил, не подумал, что окно листера надо искать. Должно быть примерно так:
Code:
SetHotkeyAction /K:C /H:0 /DM /S "AlignListerWindow"

Func AlignListerWindow()
    If IniRead("~/R", COMMANDER_INI, "Lister", "Maximized", 0) = 0 Then
        WinGetPos("x", "y", "w", "h")
        IniWrite("~/R", COMMANDER_INI, "Lister", "x", x)
        IniWrite("~/R", COMMANDER_INI, "Lister", "y", y)
        IniWrite("~/R", COMMANDER_INI, "Lister", "dx", w)
        IniWrite("~/R", COMMANDER_INI, "Lister", "dy", h)
        Local hWnd = WinFind(0, "TLister")
        If hWnd = 0 Then Return ShowHint("Окно листера не найдено")
        WinSetPos(x, y, w, h, "", hWnd)       
    EndIf
EndFunc

CTRL+0 подстраивает окно листера под позицию окна тотала при условии, что окно листера не развернуто во весь экран. Так вы хотели?
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 17

Post (Separately) Posted: Mon Feb 09, 2026 12:31    Post subject: Reply with quote

Orion9 wrote:

Т.е. вместо 1 теперь 2. Так реально лучше смотрится, на мой взгляд.


Хм... не уверен что лучше. Нужно подумать. Но вот навеяло другую идея походу: почему "в спокойствии" у нас "0" ? По идеи должно быть "0.0".


Orion9 wrote:

If hWnd = 0 Then Return ShowHint("Окно листера не найдено")

Это строка тут лишняя, ИМХО.
Да, круто что окно Листера теперь сразу подстраивается, единственное, теряет фокус (возможно, нужно просто передать его обратно).
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1002

Post (Separately) Posted: Mon Feb 09, 2026 13:27    Post subject: Reply with quote

FallenAngel
Нужно просто отформатировать строку через StrFormat. Т.е. вместо:
Code:
Round(nRecvSpeed / 1000, 2) & '  ↑ ' & Round(nSendSpeed / 1000, 2) & ' mb/s'

Должно быть:
Code:
StrFormat("%02.2f", Round(nRecvSpeed / 1000, 2)) & '  ↑ ' & StrFormat("%02.2f", Round(nSendSpeed / 1000, 2)) & ' mb/s'

Может вам так больше понравится.
Quote:
Это строка тут лишняя, ИМХО.

Ну если лишняя, можно убрать )

А что на счет фокуса? У меня он не теряется. Но если у вас теряется, можно принудительно его вернуть через WinSetState:
Code:
WinSetPos(x, y, w, h, "", hWnd)
WinSetState(23, hWnd)

А вот и линксы, как обещал:
 Hidden text

Ну не персик ли? Smile

 PS
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 17

Post (Separately) Posted: Mon Feb 09, 2026 15:18    Post subject: Reply with quote

Orion9 wrote:

Может вам так больше понравится.


Пока так тестирую:
Code:
StrFormat("%02.1f", Round(nRecvSpeed / 1000, 1)) & '  ↑ ' & StrFormat("%02.1f", Round(nSendSpeed / 1000, 1)) & ' mb/s'




Code:
WinSetState(23, hWnd)

Да, так все ОК.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1002

Post (Separately) Posted: Tue Feb 10, 2026 13:54    Post subject: Reply with quote

Прошелся тут по последним страницам. Удивительно, ссылки на 11,000 сохранилась, а ссылка на 13К не доступна. Непорядок творится в королевстве. Перезаливка.
https://www.upload.ee/files/19062762/TC.11.56.7z.html
 Warning

Обновил модуль Icons.aucfg.
 Hidden text

В модуле есть две универсальные функции для показа системных уведомлений и создания иконок в трее: NotifyInfoMessage и NotifyIcon. Коды кнопок 64000-64002 тестирую функционал. Созданные идентификаторы иконок нужно добавить в секцию финализации, чтобы при выхода из ТС они не оставались висеть в трее.
 Pragma AutorunFinalizeSection

Модуль можно накатить на тот, что в сборке, для удобного и быстрого теста.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 17

Post (Separately) Posted: Tue Feb 10, 2026 15:44    Post subject: Reply with quote

Orion9 wrote:
Перезаливка.

Почему просто не использовать приличный хостинг? terabox.com, mega.nz или pixeldrain.com ?

Orion9 wrote:
Обновил модуль Icons.aucfg.

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

Повторюсь, намного полезнее (понятнее, удобнее, логичнее, ...) было бы выкладывать просто модулями. Возможно и найдется самурай, который скачает сборку и осилит часть написанного... но это 1-2 юзера (с огромным запасом свободного времени) и не более.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1002

Post (Separately) Posted: Tue Feb 10, 2026 19:01    Post subject: Reply with quote

FallenAngel wrote:
Возможно и найдется самурай, который скачает сборку и осилит часть написанного

Cамурай звучит громо, скорее фрик, как я )

А я ведь предупреждал Loopback, что у нас с Autorun всё всьерёз и надолго, а он мне не верил ) Могу только повторить свой пледж и коммитмент:
 Hidden text


FallenAngel wrote:
terabox.com, mega.nz или pixeldrain.com

Первый всё в том же 16 Кб блоке, остальные, судя по всему, в белых списках, но требуют регистрацию, а оно мне вроде как не надо.

Сделать перманентную ссылку на том же гугл диске (или любом другом диске) не проблема. Но не раньше, чем Loopback сделает перманентную ссылку на финальную версию Autorun Smile

А пока все это для тестов и эксперементов. Если кто-то может извлечь из этого пользу — без проблем. Буду только рад, что помимо меня кому-то ещё пригодилось.

FallenAngel wrote:
Добавляйте небольшое описание в самом начале файла, модуль возможно и интересный, но не ясно что он делает (как и остальные 13к строк).

Ранний функционал довольно хорошо документирован, просто на последние модули я не нашел возможности сделать описание. Думал, сейчас у меня будет большое окно и смогу наверстать упущенное, но нет, судя по всему, опять не получится.

Но не все так плохо. В этом топике осталось практически всё, правда мотать придется чуть дальше.

Конкретно по этому модулю. Имхо, он неплохо документирован самими комментариями. Да, возможно, сейчас вам так не кажется, но со временем все прояснится, если вы не бросите заниматься Autorun.

Когда-то, глянув на этот модуль, я подумал, надо быть реально повернутым, чтобы полностью в нем разобраться. Однако сейчас я на него смотрю и он мне кажется довольно простым и понятным. Одна мальнькая ремарка: с тех пор прошло два года Smile

Так что верно говорят, что путь осилит идущий, а нет кто с него сходит или топчется на месте)

P.s. Ссылка на модуль за CloudFlare, т.ч. приложу его сюда.
 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 ... 216, 217, 218
Page 218 of 218

 
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