View previous topic :: View next topic |
Author |
Message |
Mrak_Tlen
Joined: 08 Oct 2024 Posts: 8
|
(Separately) Posted: Mon Dec 16, 2024 01:41 Post subject: |
|
|
А Авторан еще не научился вгрызаться в контекстное меню, чтобы там нагородить своих подменю? |
|
Back to top |
|
 |
yahuu
Joined: 22 Jun 2023 Posts: 30
|
(Separately) Posted: Wed Dec 18, 2024 13:06 Post subject: |
|
|
Выберите два или более файлов, выполните следующий код, StrReplace не заменил auCR.
Code: |
SetHotkeyAction /K:A /H:F1 xxx
Func xxx()
Local ListSel= GetSelectedItems(3, 0)
Local Name = StrPart(ListSel, auCR, 2)
msgbox(Name)
msgbox(StrReplace(Name, auCR, 'aaa'))
EndFunc
|
|
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 784
|
(Separately) Posted: Wed Dec 18, 2024 20:38 Post subject: |
|
|
Mrak_Tlen wrote: | А Авторан еще не научился вгрызаться в контекстное меню, чтобы там нагородить своих подменю? |
Ну, такого еще, насколько мне известно, нет Хотя меню можно повесить практически куда угодно функцией ControlSetMouseAction:
https://total.darkhost.ru/wiki/lib/exe/fetch.php?cache=&media=ru:autorun:documentation2x:tc_window_index_ru.png
У меня уже четыре меню так вызываются в трех областях окна ТС. Причем два из них в заголовке - одно создается из бар-файла, другое - из текста, формируемого в скрипте. И это я еще не брался за развешивание как следует
 Hidden text Я ответил на ваше ПМ еще несколько дней назад, но вы, наверное, пропустили. Просмотрите, как будет возможность.
Доделал наконец фичу, над которой работал больше недели. По-моему, получилось неплохо:
Если коротко: можно прикрепить к подсказке данные из WDX плагинов и консольных утилит, причем WDX можно сочетать и добавлять на лету.
 Подробнее --------------------------------------------------
Подсказка в файловых панелях
Добавление информации клавишами-модификаторами
--------------------------------------------------
Ctrl - добавить данные MediaInfo
Ctrl+Shift - добавить данные WDX плагинов
Ctrl+Shift+Alt - добавить данные ExifTool
Ctrl+Shift+Win - добавить данные Accesschk
Ctrl+Win+Alt - добавить данные о правах доступа
Alt - добавить данные кастомных полей
--------------------------------------------------
В некоторых случаях, если комбинация клавиш не срабатывает (или плохо срабатывает), помогает смена порядка при нажатии, например, вместо Ctrl+Shift может заработать Shift+Ctrl. В 64-битной версии Total Commander при вызове подсказки клавиши-модификаторы не работают совсем. Одиночный Alt не работает ни в той, ни в другой версии (проверить работоспособность Alt можно только в экранной клавиатуре). Закрепление комбинаций клавиш хорошо работает в обоих версиях Total Commander.
--------------------------------------------------
Закрепление комбинаций клавиш (Lock)
--------------------------------------------------
CapsLock - закрепить данные MediaInfo
Ctrl+CapsLock - закрепить данные ExifTool
Shift+CapsLock - закрепить данные WDX плагинов
Alt+CapsLock - закрепить данные Accesschk
--------------------------------------------------
Нормальная работа клавиши CapsLock будет нарушена в окне ТС, но не в диалоговых окнах.
Переназначить клавишу CapsLock, как и другие комбинации клавиш, можно в скрипте autorun.cfg.
--------------------------------------------------
Управление параметрами MediaInfo и WDX
--------------------------------------------------
Активная панель: Ctrl+ЛКМ - параметры MediaInfo
Строка состояния: ПКМ - меню параметров WDX
--------------------------------------------------
Параметры MediaInfo можно изменить в скрипте autorun.cfg.
Меню параметров WDX находится в файле WdxHint.cfg, содержимое файла можно редактировать отдельно.
Кроме плагинов указанных в файле WdxHint.cfg, к подсказке можно прикрепить данные любого WDX плагина "на лету" (см. ниже)
-------------------------------------------------------------------
Управление фоном панелей и переключение темы
-------------------------------------------------------------------
Ctrl+Shift+"+" - Повышение тонов
Ctrl+Shift+"-" - Понижение тонов
Ctrl+"+" - Автоповышение тонов
Ctrl+"-" - Автопонижение тонов
ESC - Выход из автоперебора
Alt+"+" - Показ текущих значений фона
Alt+"-" - Показ текущих значений схемы
Alt+Shift+"+" - Повышение одного тона
Alt+Shift+"-" - Понижение одного тона
Alt+Win+ЛКМ - Переключение цветовой схемы
Alt+ЛКМ (Активная) - Переключение сохраненного фона
Alt+ЛКМ (Неактивная) - Переключение предопределенного фона
Alt+Shift+ЛКМ (Активная) - Переключение сохраненного фона (реверс)
-------------------------------------------------------------------
Сохранение фона вызывается командой 70002. По умолчанию фон сохраняется в файле \Bars\Backdrops.bar. Путь и название файла можно изменить в скрипте Backdrop.aucfg. Предопределенные значения фона также меняются в скрипте Backdrop.aucfg. Параметры темы хранятся в файлах Colors[N].ini, где N - значение ключа Instance каждого отдельного файла. Файлы создаются вручную и содержат редирект секций [Colors] и [ColorsDark] основного файла конфигурации ТС. В дополнительной секции [ColorTheme] содержится описание темы и ее номер - ключ Instance, который должен совпадать с номером указанным в имени файла. Предусмотрено переключение между пятью темами. Имя файла текущей темы не должно содержать ее номера N, но он должен быть указан в ключе Instance, как и у остальных файлов Colors[N].ini.
Для настройки параметров темы используется утилита ColorMania или стандартный диалог выбора цвета. Скрипт отслеживает изменения в окне ColorMania (или окне диалога) и применяет значения цвета к элементам текущей темы в реальном времени. В окне ColorMania необходимо выбрать формат цвета "Powerbuilder" (функции скрипта, работающие с повышением и понижением тонов, поддерживают только десятичные значения цвета). Клавиши управления в окне: CTRL - применение цвета, SHIFT - откат значения, ALT - значение по умолчанию, ESC - синхронизация цвета, WIN - значение из буфера.
При нажатии на ALT текущему элементу темы присваивается значение цвета по умолчанию, т.е. -1. Клавиша ESC меняет текущее значение цвета в окне ColorMania на цвет элемента темы до начала отслеживания. Клавиша WIN извлекает значение цвета из буфера и применяет его к текущему элементу (может пригодится при возвращении к первоначальным значениям секции).
Элементы темы выбираются из меню доступного после начала отслеживания. Для запуска отслеживания используется код 70001, клавиши-модификаторы меняют поведение функции при вызове из кнопки:
TOTALCMD#BAR#DATA
70001
%COMMANDER_EXE%
Запустить/Остановить|Отслеживание цвета в буфере| |Ctrl - Понижение тонов|Ctrl+Shift - Повышение тонов|Alt - Вернуть первоначальный|Alt+Win - Вернуть предыдущий| |Shift - Показать значения|Alt+Shift - Скопировать в буфер
70001
----------------------------------------------------------------------------
Код 70040 вызывает смену фона и также может использоваться с модификаторами:
----------------------------------------------------------------------------
TOTALCMD#BAR#DATA
70040
%COMMANDER_EXE%
Смена сохраненного фона|Shift - Обратное направление| |Ctrl - Резервные значения|Alt [Shift] - Параметры задержки| |Win - Перечитать сохраненные|Win+Alt - Автоповышение тонов|Win+Ctrl - Автопонижение тонов
0
70040
----------------------
Плагины WDX
----------------------
Код: 70100
Файл: Plugin.aucfg
----------------------
Кнопка создает меню и файл панели для всех зарегистрированных WDX плагинов, а также проверяет их загрузку. По умолчанию имя файла панели \Bars\Auto_wdx.bar. Работоспособность панели зависит от текущего состояния массива, который заполняется при первом нажатии на кнопку и сохраняется до конца текущей сессии. Последующие вызывы кнопки отображают меню созданное из заполненного массива. Нажатие Ctrl - перечитывает секцию ContentPlugins и создает новый массив (а вместе с ним и панель Auto_wdx.bar), Ctrl+Shift - проверяет плагины на возможность загрузки скриптами Autorun. Имя плагина и код ошибки выводятся в системный отладчик функцией OutputDebugString.
При выборе пункта меню в подсказке отображаются непустые поля плагина. Удерживание Ctrl - все поля плагина. Shift - добавить нумерацию. ВАЖНО: если после выбора плагина нажать Alt, плагин будет приклеплен к подсказке файловых панелей, т.е. данные его полей будут отображаться в подсказке при наведении указателя мыши на объекты с удержанием Ctrl+Shift.
--------------------
Кнопка "Autorun"
--------------------
При наведении на кнопку указателя мыши отображается подсказка о текущей версии плагина Autorun. Удерживание Ctrl - выводит сведения о запущенных потоках и процессах, Shift - о загруженных библиотеках и субплагинах, Alt - о подключаемых файлах и путях.
Одиночный клик - активирует окно просмотрщика DebugView. Двойной клик - запускает DebugView со списом всех доступных переменных Autorun. Двойной клик + Ctrl - запускает DebugView со списом всех переменных окружения. Правый клик мыши отображает меню подключенных модулей. Выбор пункта меню открывает модуль в редакторе. Удерживание Ctrl при выборе пункта меню - переход к файлу модуля в окне ТС. Пункт меню "Настройки" не выполняет никаких действий.
А вот вам и сборочка для удобных тестов:
https://www.upload.ee/files/17528244/TOTALCMD.7z.html
 Hidden text Я назвал ее Total Commander "Сила Autorun 3000" Почему 3000? потому что там 3000 строк на Autorun! 
Собрал в нее все самое интересное, что было за последний год в этой теме.) Фактически это чистый ТС и скрипты на Autorun. Некоторые другие плагины и утилиты включены только по необходимости, т.к. они тоже завязаны на скрипты Autorun. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 784
|
(Separately) Posted: Thu Dec 19, 2024 00:21 Post subject: |
|
|
yahuu wrote: | Выберите два или более файлов, выполните следующий код, StrReplace не заменил auCR. |
Функция GetSelectedItems разделяет список символами auCRLF, поэтому правильнее будет:
Code: | Local Name = StrPart(ListSel, auCRLF, 2) |
При этом символы разделения не попадают в часть строки, разделенную функцией StrPart.
В вашем случае туда попадает не auCR, а auLF, оставшийся при разделении. Проверить это можно заменой символа:
Code: | SetHotkeyAction /K:A /H:F1 xxx
Func xxx()
Local ListSel= GetSelectedItems(3, 0)
Local Name = StrPart(ListSel, auCR, 2)
msgbox(Name)
msgbox(StrReplace(Name, auLF, 'aaa'))
EndFunc
|
|
|
Back to top |
|
 |
yahuu
Joined: 22 Jun 2023 Posts: 30
|
(Separately) Posted: Fri Dec 20, 2024 12:18 Post subject: |
|
|
Orion9 wrote: |
Функция GetSelectedItems разделяет список символами auCRLF
|
спасибо |
|
Back to top |
|
 |
yahuu
Joined: 22 Jun 2023 Posts: 30
|
(Separately) Posted: Sat Dec 21, 2024 17:56 Post subject: |
|
|
Можете ли вы предоставить функцию LoopListSel()? Обрабатывайте текущие выбранные элементы по одному в цикле. В настоящее время я реализую это следующим образом. Или есть лучший способ?
Code: |
Func separateCompress()
Local Count = RequestInfo(11005)
If Count=0 Then SendCommand(2936,-1)
Local Count = RequestInfo(11005), ListSel = GetSelectedItems(3, 0)
For var = 1 To Count
Local Name = StrPart(ListSel, auCRLF, var)
Local FullName = RequestCopyDataInfo("SP") & Name
Local FullNoExtNewName = getFullNoExtName(RequestCopyDataInfo("SP"), Name) & ".7z"
Local sParam = 'a -t7z -mx=5 "' & FullNoExtNewName & '" "' & FullName & '"'
ShellExec %"s7zip" %"sParam"
Next
EndFunc
Func getFullNoExtName(sPath, fileName)
#Если имя папки содержит символ ., TotalCMD будет рассматривать содержимое после . как расширение, поэтому необходимо обрабатывать папки отдельно.
If StrPos(FileGetAttr(sPath & fileName), "D") Then
Return sPath & fileName
Else
If StrPos(fileName, '.') > 0 Then
Return sPath & StrLeft(fileName, StrPos(fileName, '.', -1)-1)
Else
Return sPath & fileName
EndIf
EndIf
EndFunc
|
|
|
Back to top |
|
 |
efesreal
Joined: 23 Dec 2024 Posts: 1
|
(Separately) Posted: Mon Dec 23, 2024 12:31 Post subject: |
|
|
@yahuu
My code:
Code: |
# Get selected files in active panel and fill List object
SelectedFiles = List()
selectedList = GetSelectedItems(3,0)
selectedCount = RequestInfo(1004+RequestInfo(1000))
For i=1 To selectedCount
SelectedFiles.add(RequestCopyDataInfo("SP") & StrPart(selectedList, auCRLF, i))
Next
# Releases the List object
Free SelectedFiles
|
|
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 784
|
(Separately) Posted: Tue Dec 24, 2024 12:48 Post subject: |
|
|
yahuu wrote: | В настоящее время я реализую это следующим образом. Или есть лучший способ? |
Можно использовать объект List, как уже написали выше. Сейчас, наверное, это самый простой и лучший способ, особенное если использовать его свойство Text:
Code: | SetHotkeyAction /K:A /H:F1 SelectedList
Func SelectedList()
Local aSel = List()
Local sPath = RequestCopyDataInfo("SP"), j, k = 0
aSel.Text = GetSelectedItems(3, 0)
OutputDebugString("Autorun: Selected=" & aSel.Count)
For j = 0 To aSel.Count - 1
OutputDebugString("Autorun: Item[" & j & "]=" & sPath & aSel[j])
If FileExist(sPath & aSel[j]) Then k += 1
Next
ShowHint("Selected: " & aSel.Count & auCRLF & "Processed: " & k)
Free(aSel)
EndFunc |
|
|
Back to top |
|
 |
yahuu
Joined: 22 Jun 2023 Posts: 30
|
(Separately) Posted: Wed Dec 25, 2024 05:22 Post subject: |
|
|
Спасибо вам |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 338
|
(Separately) Posted: Wed Dec 25, 2024 09:56 Post subject: |
|
|
А можно-ли плагином отследить например, переключение языка через стандартный диалог настройки? То-есть цель запустить нужный файл в зависимости от выбранного языка. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 784
|
(Separately) Posted: Wed Dec 25, 2024 14:24 Post subject: |
|
|
AkulaBig
Если только отдельным потоком попробовать отслеживать, если вас это не пугает и действительно настолько нужно  |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 338
|
(Separately) Posted: Wed Dec 25, 2024 15:54 Post subject: |
|
|
Я в инете никого и ничего не боюсь. Тут все смелые
Лучше подскажите в каком направлении почитать справку. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2689
|
(Separately) Posted: Wed Dec 25, 2024 16:07 Post subject: |
|
|
AkulaBig
Вот здесь и далее не совсем то обсуждалось, но может, пригодится? |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 784
|
(Separately) Posted: Wed Dec 25, 2024 18:06 Post subject: |
|
|
AkulaBig wrote: | Я в инете никого и ничего не боюсь. Тут все смелые  |
Как я уже говорил, после написания своих плагинов, скрипты на Autorun вам будут казаться семечками.) Поэтому говоря "если вас это не пугает", я имел в виду саму идею, что будет крутиться отдельный поток, проверять что-то каждую секунду в фоне, ресурсы жрать нехилые и мешать нормальной работе ТС
С последними оконными функциями Loopback, конечно, добавил адской мощи плагину. Можно, например, сделать вот так:
 Hidden text Code: | Global LANG_THREAD = 1
RegisterCommand 60008 "WatchLangSwitch"
SetHotkeyAction /K:A /H:F1 WatchLangSwitch 0
RunThread ThreadWatchLang
Func WatchLangSwitch(lParam)
If LANG_THREAD > 0 Then
LANG_THREAD = 0
Else
LANG_THREAD = 1
RunThread ThreadWatchLang
EndIf
EndFunc
Func ThreadWatchLang()
Local h = WinFind(AUTORUN_TCHANDLE, "TMyPanel", 5), txt, lng
Static c = 0
If c > 0 Then Return
c += 1
While LANG_THREAD > 0
txt = WinGetText(h)
If DetectLang(txt) <> lng Then ShowHint("Язык: " & DetectLang(txt))
OutputDebugString("Autorun: TMyPanel = " & txt)
lng = DetectLang(txt)
OutputDebugString("Autorun: Language = " & lng)
Sleep(1000)
Wend
c = 0
LANG_THREAD = 0
ShowHint("Поток остановлен")
EndFunc
Func DetectLang(Text)
Local Lang
If StrPos(Text, "файл") Then
Lang = "Русский"
ElseIf StrPos(Text, "file") Then
Lang = "English"
Else
Lang = "???"
EndIf
Return Lang
EndFunc |
Проверяется строка состояния каждую секунду и смотрится на каком языке написан текст. Делал на скорую руку и без комментариев, но, думаю, вы спокойно разберетесь и переделаете все под себя, если такая фишка действительно будет нужна.
Что касается ресурсов, то у меня сейчас, включая этот, четыре потока крутятся - загрузка ЦПУ от totalcmd.exe в пределах погрешности
 Кнопка TOTALCMD#BAR#DATA
60008
%COMMANDER_EXE%
Отслеживать смену языка
60008
Включить или отключить можно также по ALT+F1. По умолчанию при запуске ТС поток включен. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 338
|
(Separately) Posted: Wed Dec 25, 2024 18:39 Post subject: |
|
|
sa wrote: | AkulaBig
Вот здесь и далее не совсем то обсуждалось, но может, пригодится? |
По кнопке или хоткею проблем нет сделать даже без Autorun. Хочется именно переключаться стандартным способом.
Добавлено спустя 7 минут:
Orion9 wrote: | ресурсы жрать нехилые и мешать нормальной работе ТС
|
Собственно чудес не бывает. Понятно, что все идет через таймер. Но ведь таже оконная процедура тоже CALLBACK. Да многие функции через таймер. Вроде лишнего не грузят. Вот и хочется проверить, стоит-ли игра свеч.
Orion9 wrote: |
Что касается ресурсов, то у меня сейчас, включая этот, четыре потока крутятся - загрузка ЦПУ от totalcmd.exe в пределах погрешности
|
Что и ожидается. Спасибо большое. Мне главное принцип понять, а дальше придумаю, что надо. |
|
Back to top |
|
 |
|
|
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
|