Autorun

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Mrak_Tlen
Сообщения: 30
Зарегистрирован: Вт окт 08, 2024 21:37

Сообщение Mrak_Tlen »

А Авторан еще не научился вгрызаться в контекстное меню, чтобы там нагородить своих подменю?
yahuu
Сообщения: 40
Зарегистрирован: Чт июн 22, 2023 07:32

Сообщение yahuu »

Выберите два или более файлов, выполните следующий код, StrReplace не заменил auCR.

Код: Выделить всё

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
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Mrak_Tlen писал(а):А Авторан еще не научился вгрызаться в контекстное меню, чтобы там нагородить своих подменю?
Ну, такого еще, насколько мне известно, нет :) Хотя меню можно повесить практически куда угодно функцией ControlSetMouseAction:
https://total.darkhost.ru/wiki/lib/exe/ ... dex_ru.png

У меня уже четыре меню так вызываются в трех областях окна ТС. Причем два из них в заголовке - одно создается из бар-файла, другое - из текста, формируемого в скрипте. И это я еще не брался за развешивание как следует :lol:
[cut]Я ответил на ваше ПМ еще несколько дней назад, но вы, наверное, пропустили. Просмотрите, как будет возможность.[/cut]

Доделал наконец фичу, над которой работал больше недели. По-моему, получилось неплохо:

Изображение

Если коротко: можно прикрепить к подсказке данные из WDX плагинов и консольных утилит, причем WDX можно сочетать и добавлять на лету.

[cut="Подробнее"]--------------------------------------------------
Подсказка в файловых панелях
Добавление информации клавишами-модификаторами
--------------------------------------------------
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 при выборе пункта меню - переход к файлу модуля в окне ТС. Пункт меню "Настройки" не выполняет никаких действий. [/cut]
А вот вам и сборочка для удобных тестов:
https://www.upload.ee/files/17528244/TOTALCMD.7z.html

[cut]Я назвал ее Total Commander "Сила Autorun 3000" Почему 3000? потому что там 3000 строк на Autorun! :lol:[/cut]

Собрал в нее все самое интересное, что было за последний год в этой теме.) Фактически это чистый ТС и скрипты на Autorun. Некоторые другие плагины и утилиты включены только по необходимости, т.к. они тоже завязаны на скрипты Autorun.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

yahuu писал(а):Выберите два или более файлов, выполните следующий код, StrReplace не заменил auCR.
Функция GetSelectedItems разделяет список символами auCRLF, поэтому правильнее будет:

Код: Выделить всё

Local Name = StrPart(ListSel, auCRLF, 2)
При этом символы разделения не попадают в часть строки, разделенную функцией StrPart.

В вашем случае туда попадает не auCR, а auLF, оставшийся при разделении. Проверить это можно заменой символа:

Код: Выделить всё

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 
yahuu
Сообщения: 40
Зарегистрирован: Чт июн 22, 2023 07:32

Сообщение yahuu »

Orion9 писал(а): Функция GetSelectedItems разделяет список символами auCRLF
спасибо
yahuu
Сообщения: 40
Зарегистрирован: Чт июн 22, 2023 07:32

Сообщение yahuu »

Можете ли вы предоставить функцию LoopListSel()? Обрабатывайте текущие выбранные элементы по одному в цикле. В настоящее время я реализую это следующим образом. Или есть лучший способ?

Код: Выделить всё

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
efesreal
Сообщения: 1
Зарегистрирован: Пн дек 23, 2024 11:23

Сообщение efesreal »

@yahuu

My 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
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

yahuu писал(а):В настоящее время я реализую это следующим образом. Или есть лучший способ?
Можно использовать объект List, как уже написали выше. Сейчас, наверное, это самый простой и лучший способ, особенное если использовать его свойство Text:

Код: Выделить всё

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
yahuu
Сообщения: 40
Зарегистрирован: Чт июн 22, 2023 07:32

Сообщение yahuu »

Спасибо вам
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

А можно-ли плагином отследить например, переключение языка через стандартный диалог настройки? То-есть цель запустить нужный файл в зависимости от выбранного языка.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Если только отдельным потоком попробовать отслеживать, если вас это не пугает и действительно настолько нужно :)
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Я в инете никого и ничего не боюсь. Тут все смелые :lol:
Лучше подскажите в каком направлении почитать справку.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

AkulaBig
Вот здесь и далее не совсем то обсуждалось, но может, пригодится?
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Я в инете никого и ничего не боюсь. Тут все смелые :lol:
:lol:

Как я уже говорил, после написания своих плагинов, скрипты на Autorun вам будут казаться семечками.) Поэтому говоря "если вас это не пугает", я имел в виду саму идею, что будет крутиться отдельный поток, проверять что-то каждую секунду в фоне, ресурсы жрать нехилые и мешать нормальной работе ТС :lol:

С последними оконными функциями Loopback, конечно, добавил адской мощи плагину. Можно, например, сделать вот так:
[cut]

Код: Выделить всё

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
[/cut]
Проверяется строка состояния каждую секунду и смотрится на каком языке написан текст. Делал на скорую руку и без комментариев, но, думаю, вы спокойно разберетесь и переделаете все под себя, если такая фишка действительно будет нужна.

Что касается ресурсов, то у меня сейчас, включая этот, четыре потока крутятся - загрузка ЦПУ от totalcmd.exe в пределах погрешности :lol:

[cut="Кнопка"]TOTALCMD#BAR#DATA
60008

%COMMANDER_EXE%
Отслеживать смену языка


60008
[/cut]
Включить или отключить можно также по ALT+F1. По умолчанию при запуске ТС поток включен.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

sa писал(а):AkulaBig
Вот здесь и далее не совсем то обсуждалось, но может, пригодится?
По кнопке или хоткею проблем нет сделать даже без Autorun. Хочется именно переключаться стандартным способом.

Добавлено спустя 7 минут:
Orion9 писал(а):ресурсы жрать нехилые и мешать нормальной работе ТС :lol:
Собственно чудес не бывает. Понятно, что все идет через таймер. Но ведь таже оконная процедура тоже CALLBACK. Да многие функции через таймер. Вроде лишнего не грузят. Вот и хочется проверить, стоит-ли игра свеч.
Orion9 писал(а): Что касается ресурсов, то у меня сейчас, включая этот, четыре потока крутятся - загрузка ЦПУ от totalcmd.exe в пределах погрешности :lol:
Что и ожидается. Спасибо большое. Мне главное принцип понять, а дальше придумаю, что надо.
Ответить