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 ... 217, 218, 219 ... 221, 222, 223  Next
 
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: 25

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: 1024

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: 25

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: 1024

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: 25

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: 1024

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: 1024

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: 25

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: 1024

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: 25

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: 1024

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: 25

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: 1024

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
Orion9



Joined: 01 Jan 2024
Posts: 1024

Post (Separately) Posted: Wed Feb 11, 2026 20:35    Post subject: Reply with quote

FallenAngel
Если вкратце.

Функция NotifyIcon принимает следующие параметры:
Code:
  sAction - тип действия ("add", "set", "delete")
      uID - внутренний уникальный идентификатор иконки
nCallback - код зарегистрированного сообщения для функции обратного вызова
    hIcon - дескриптор иконки (только для "add")
     sTip - текст подсказки в трее
    sText - текст уведомления (только для "add" и "set")
   sTitle - текст заголовка уведомления
    nType - флаги NIIF_* (изменение вида и поведения окна уведомлений)
   
Func NotifyIcon(sAction, uID, nCallback = 0, hIcon = 0, sTip = "", sText = "", sTitle = "", nType = 0)

Чтобы добавить иконку в трей, нужен режим "add" и еще 3 параметра. Четвертый параметр sTip тоже желателен, т.к. он отвечает за текст подсказки в трее, но его в принципе можно не указывать.

Все сводится к одному вызову, например:
Code:
NotifyIcon("add", 1005, gCode, hIco, "Иконка Autorun")

Первый и последний параметры нам уже понятны. Осталось разобраться за что именно отвечают uID = 1005, nCallback = gCode, hIcon = hIco.

uID - это просто внутренний код иконки, взятый буквально от балды. Приложение может держать в трее несколько иконок, оболочке Windows и нам самим нужно как-то их отличать. Код может быть любым числом. Здесь он 1005.

nCallback - это код, который использует оболочка, когда она посылает сообщения о событиях в трее назад приложению. И снова этот код мы должны сами придумать, но только в определенном диапазоне. Чтобы не забивать этим голову, мы просим систему выделить нам уникальный незанятый код. Каким именно будет этот код, нам не важно, мы просто запоминаем его в переменной gCode:
Code:
Global gCode = DllCall("RegisterWindowMessageW", "wstr", "TrayNotify1005", "uint")

Теперь получив нужный код, мы должны внутри приложения привязать его к реальной функции, которая будет запускаться каждый раз, когда оболочка шлет нам сообщения с этим кодом.
Code:
SetMessageAction /P %"gCode" "TestrayAction"

Внутри функции мы должны обрабатывать те сообщения, события которых нам интересны. Это прежде всего события левого и правого клика, но можно обрабатывать и другие события.
Code:
Func TestrayAction(hWnd, uMsg, wParam, lParam)
    If lParam = WM_LBUTTONDOWN Then
       MsgBox("Клик по иконке")
    ElseIf lParam = WM_RBUTTONDOWN Then
       ShowPopupMenu("~/D", COMMANDER_PATH & "\Bars\Vertical.bar")
    EndIf
EndFunc

Левый клик по иконке выводит MsgBox, правый отображает меню из Vertical.bar. Можно использать и другие команды, em_команды, mnu и bar файлы — здесь есть, где фантазии развернуться.

Остается только иконка. Дескриптор иконки hIcon можно получать по-разному. Самый простой способ — послать сообщение окну ТС с кодом 0x7f, тогда тотал вернет дескриптор своей иконки:
Code:
hIcon = SendMessage(AUTORUN_TCHANDLE, 0x7f, 2, 0)

Можно также получить дескриптор функцией ExtractIcon, вызывать которую нужно через DllCall
Code:
sIco = GetKnownFolderPath("System") & "\shell32.dll"
hIco = DllCall("shell32\ExtractIconW", _
               "ptr", AUTORUN_TCHANDLE, _
               "wstr", sIco, "uint", 15, "ptr")

В вызовах DllCall нет ничего страшного. По сути, это просто запрос к Windows, чтобы она выполнила за нас определенные действия. В данном случае таким действием является извлечение иконки с индексом 15 из shell32.dll и передача нам дескриптора.

Нам, в свою очередь, остается передать этот дескриптор функции NotifyIcon вместе с другими параметрами. Итого, полученный код будет выглядеть так:
Code:
# регистрация кода для функции обратного вызова
Global gCode = DllCall("RegisterWindowMessageW", "wstr", "TrayNotify1005", "uint")
# привязка функции обратного вызова к полученному коду
SetMessageAction /P %"gCode" "TestrayAction"

# функция обратного вызова
Func TestrayAction(hWnd, uMsg, wParam, lParam)
    If lParam = WM_LBUTTONDOWN Then
       #MsgBox("Клик по иконке")
       NotifyIcon("set", 1005, gCode, hIco, "", "Test message", "", NIIF_WARNING)
    ElseIf lParam = WM_RBUTTONDOWN Then
       ShowPopupMenu("~/D", COMMANDER_PATH & "\Bars\Vertical.bar")
    EndIf
EndFunc

# путь к иконке
sIco = GetKnownFolderPath("System") & "\shell32.dll"
# получение дескриптора иконки с индексом 15
hIco = DllCall("shell32\ExtractIconW", _
               "ptr", AUTORUN_TCHANDLE, _
               "wstr", sIco, "uint", 15, "ptr")
               
# установка в трей с идентификатором 1005   
NotifyIcon("add", 1005, gCode, hIco, "Иконка Autorun")

Вот так. Несколько строк и дело в шляпе иконка в трее Smile

Однако, чтобы этот фрагмент кода заработал самостоятельно, без привязки к модулю Icons.aucfg, необходимо перенести из него все константы и, собственно, саму функцию NotifyIcon:
 Hidden text

Работает у вас?

В этот код я добавил обработку CTRL:
Code:
If IsPressed(0x11) Then
   NotifyIcon("set", 1005, gCode, hIco, "", "Test message", "", NIIF_WARNING)
   Return
EndIf

Теперь клик по иконке с Ctrl отображает системное уведомление. Функция NotifyIcon может не только добавлять или менять иконку в трее, но также показывать системные уведомления. Единственное условие — иконка в трее должна существовать. Именно поэтому, чтобы была возможность вызвать системные уведомления без привязки к конкретной иконке, реализована функция NotifyInfoMessage.
Code:
#{
     Вызов системных уведомлений:
     
           InfoText - текст уведомления (255 символов)
          InfoTitle - текст заголовка уведомления (63 символов)
           InfoType - флаги NIIF_* меняющие вид и поведение окна уведомлений
           
     Функция использует идентификатор "1010"
#}
Func NotifyInfoMessage(InfoText, InfoTitle = "Autorun", InfoType = 0)

Функция заранее резервирует идентификатор иконки и не требует указания дескриптора — дескриптор берется из файла, указанного в gNotifyIcon. Если файл не существует, будет использоваться иконка тотала. Для обратного вызова также получается код и сохраняется в переменную Code1010. Функция обратного вызова определена как TrayNotifyInfo. Данная функция обрабатывает левый клик по иконке в трее, где отображается меню лога уведомлений. Это еще одна особенность NotifyInfoMessage — она сохраняет лог уведомлений в текущей сессии. Т.о. даже если уведомление было пропущено (закрыто по таймауту) в трее можно будет увидеть его след:
 Hidden text

Это только сами функции и их вызов. В реальности код разрастается из-за различных условий и проверок. Например, вряд ли есть необходимость всегда держать иконку в трее, а значит надо как-то учитывать это при запуске — считывать ключ из ини-файла, смотреть его значение, загружать или не загружать иконку в зависимости от этого значения и т.д. Именно поэтому модуль получился больше, чем эти две функции, ведь это мой рабочий модуль, т.е. модуль, который я использую у себя в ТС. Кое-что там лишнее и переплетается с другими модулями, поэтому сам модуль не универсальный, универсальны только эти две функции.

Как-то так Smile
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1024

Post (Separately) Posted: Thu Feb 12, 2026 14:02    Post subject: Reply with quote

Внес некоторые изменения в модуль MediaInfo.aucfg.

Раньше была возможность разделить панель на три области, чтобы отображать в каждой области свою подсказку. Теперь при удержании Shift в подсказке также отображаются данные из плагинов, тем самым общее количество подсказок возросло до шести!

Если добавить сюда переключение полей (функция реализована в модуле как SetHintFields, вызывается по Alt+F12), количество подсказок можно увеличивать до беспредела Smile

Однако пока Alt+F12 ограничивается только переключением на ExifHint и JoinHint, при этом JoinHint больше не актульна, хотя может быть использована в качестве примера вывода данных в окно подсказки.

Алгоритм вывода данных из плагинов ранее был реализован в функции JoinHint. Я перенес его в модуль MediaInfo.aucfg и добавил небольшие изменения.

Как это работает. В подсказку выводятся все непустые поля из заранее указанных плагинов в файле WdxHint.cfg. Пример файла:
Code:
File.wdx;UnicodeTest.wdx;FileX.wdx
Permissions.wdx;NTLinks.wdx;NTFSFileStreams.wdx
anytag.wdx
Script.wdx;WinScriptsAdv.wdx

Соответственно, первая строка в файле выводит в первую область панели данные из плагинов File.wdx, UnicodeTest.wdx и FileX.wdx. Вторая строка выводит во вторую область панели, а третья в третью. Комбинация плагинов в строке может быть любой. Путь к файлу WdxHint.cfg указывается в глобальной переменной наряду с другими параметрами подсказки MediaInfo:
Code:
Global gHintPipe     =   "", _
       gHintClipb    =   true, _
       gHintLines    =   60, _
       gHintWait     =   0, _     
       gHintShift    =   "duration.txt", _
       gHintCaps     =   true
       
Global gHintWdx      =   0, _       
       gHintWdxList  =   List(), _
       gHintWdxCfg   =   COMMANDER_PATH & "\Ini\WdxHint.cfg"
       
Global gHintLayout   =   List(10, 75, 15), _
       gHintContent  =   List("size.txt", "Inform", "hint.txt"), _
       gHintSleep    =   List(0, 0, 0)

Переменные должны быть объявлены в модуле autorun.cfg, желательно сразу после инструкции Pragma AutorunPluginFields, чтобы избежать ошибки инициализации при запуске ТС (об этом подробнее по первой ссылке).

gHintPipe, gHintWdx и gHintWdxList используются для внутренних целей, менять их значения не нужно. Остальных переменные описавались ранее, как и примеры их использования:
 Hidden text

В подсказке используются шаблоны MediaInfo: текстовые файлы с собственной разметкой и синтаксисом. Внося изменения в эти файлы, можно подстраивать под себя вывод из MediaInfo.dll. Сейчас используются три шаблона hint.txt, size.txt и duration.txt, можно создать другие или полностью передлать эти.
 hint.txt

 size.txt

 duration.txt

Шаблоны должны находиться в каталоге библиотеки.

Также в файле autorun.cfg самой первой строкой должны быть прописаны поля подсказки в инструкции Pragma AutorunPluginFields:
Code:
Pragma AutorunPluginFields "C1:::MediaHint" "C2:::MediaHint" "C3:::MediaHint" "C4:::MediaHint" "C5:::MediaHint" "C6:::MediaHint" "C7:::MediaHint" "C8:::MediaHint" "C9:::MediaHint" "C10:::MediaHint" "C11:::MediaHint" "C12:::MediaHint" "C13:::MediaHint" "C14:::MediaHint" "C15:::MediaHint" "C16:::MediaHint" "C17:::MediaHint" "C18:::MediaHint" "C19:::MediaHint" "C20:::MediaHint" "C21:::MediaHint" "C22:::MediaHint" "C23:::MediaHint" "C24:::MediaHint" "C25:::MediaHint" "C26:::MediaHint" "C27:::MediaHint" "C28:::MediaHint" "C29:::MediaHint" "C30:::MediaHint" "C31:::MediaHint" "C32:::MediaHint" "C33:::MediaHint" "C34:::MediaHint" "C35:::MediaHint" "C36:::MediaHint" "C37:::MediaHint" "C38:::MediaHint" "C39:::MediaHint" "C40:::MediaHint" "C41:::MediaHint" "C42:::MediaHint" "C43:::MediaHint" "C44:::MediaHint" "C45:::MediaHint" "C46:::MediaHint" "C47:::MediaHint" "C48:::MediaHint" "C49:::MediaHint" "C50:::MediaHint" "C51:::MediaHint" "C52:::MediaHint" "C53:::MediaHint" "C55:::MediaHint" "C55:::MediaHint" "C56:::MediaHint" "C57:::MediaHint" "C58:::MediaHint" "C59:::MediaHint" "C60:::MediaHint"

Указанные 60 полей должны быть предварительно добавлены в секцию HintsCustomField основной конфигурации ТС, т.е. в секции должны быть два щаблона *.* по 30 полей каждый, которые должны ее замыкать.

Возможные сценарии.

1) Если в секции нет других расширений. Достаточно просто применить готовый вариант:
 Hidden text

2) Если в секции есть другие шаблоны и маски. Нужно добавить по последнему номеру, например:
 Hidden text

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

Всё. Предварительная часть установки завершена. Осталось подключить модуль.

Модуль подключается стандартно, директивой Pragma Include, в основной конфигурации Autorun:
Code:
Pragma Include %COMMANDER_PATH%\Ini\Scripts\MediaInfo.aucfg


После перезапуска ТС альтернативная подсказка из модуля должна отображаться на панелях при наведении курсора мыши на нужный файл с удержанием CTRL или включеном CapsLock. Однако CTRL работает только в 32-битной версии ТС из-за некоторых ограничений.

Окно панели поделится на 3 части: 10% справа, 75% центр, 15% слева. В каждой области отображается своя подсказка из MediaInfo.dll. Удержание Shift переключает отображение на плагины. Поскольку Shift не работает в TCx64, как и CTRL, переключением доступно только через Win+CapsLock. Данная комбинация работает и в TCx32.

Кроме подсказки, в модуле реализована кнопка для подсчета времени воспроизведения у выделенных файлов и каталогов. Код кнопки 71000. Подробнее о функционале здесь

Сам по себе модуль автономный, если не считать манипуляций описанных выше, связанных прежде всего с установкой подсказки в качестве альтернативной. В заголовке модуля требуется только указать корректные пути к библиотеке MediaHint.dll и утилите ExiTool:

 MediaInfo.aucfg
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 ... 217, 218, 219 ... 221, 222, 223  Next
Page 218 of 223

 
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