Автоматизация переключений настроек Total Commander
В этой теме будут рассматриваться вопросы автоматизации переключений настроек Total Commander (и не только), при которых требуются дополнительные "движения" - эмуляция клавиатурных нажатий, утилиты, различные приёмы.
Как в окнах Total Commander нажимать на кнопки и вводить текст без эмуляции клавиатурных нажатий.
Для автоматизации процесса в ряде случаев необходимо вызывать различные окна, вводить в них определённый текст и нажимать всевозможные кнопки. Для этого создаются скрипты, макросы..., которые с помощью эмуляции клавиатурных нажатий делают ряд действий, что позволяет улучшить процесс и уменьшить время на ту или иную задачу. Но, как показала практика есть минусы: - При определённой раскладки клавиатуры текст вводится некорректно - При изменении пунктов меню окнах невозможно точно попасть в нужный элемент - Нестабильность работы на разных системах - Нестабильность работы при разной загруженности системы ...
В 23.9 версии утилиты TCIMG появилась возможность уменьшить ошибочное срабатывание клавиатурных нажатий
Команда buttn позволяет нажимать на кнопки и вводить текст путём посылания команды идентификатору элемента управления (как это делается в программировании)
Утилита позволяет любому, кто далёк от программирования создать собственную кнопку, приложив немного терпения и усидчивости.
Постараюсь в этой статье подробно описать процесс.
buttn=CLASS||BUTTONID1(|$bMOUSE|$cCLICKS|$xPOZ|$yPOZ|$tTITLE|$sPAUSE)||TextID1(|$iLINE|$tTITLE|$sPAUSE) [Нажатие на кнопку(и) по ID в заданном окне и ввод строк(и) в ID элемент(ы)] - CLASS - это класс окна (параметр всегда идёт первым) - Параметры отделяются || - BUTTONID1 - Идентификатор элемента управления, далее идут необязательные подпараметры, относящие к элементу, отделяемые | - $bMOUSE - Кнопка мыши, которой эмулировать нажатие: LINE= left, right, middle, main, menu, primary, secondary. По умолчанию левая кнопка. - $cCLICKS - Количество кликов мыши. По умолчанию CLICKS=1. - $xPOZ - Координата POZ по X для клика внутри элемента, относительно левого верхнего угла элемента. По умолчанию в центре. - $yPOZ - Координата POZ по Y для клика внутри элемента, относительно левого верхнего угла элемента. По умолчанию в центре. - $tTITLE - Текст окна TITLE - $sPAUSE - пауза в миллисекундах PAUSE перед следующим нажатием или вводом текста - TextID1 - Идентификатор элемента управления для ввода строк/текста, далее идут необязательные подпараметры, относящие к элементу, отделяемые | - $iLINE - строка/текст устанавливаемый в элемент - $tTITLE - Текст окна TITLE - $sPAUSE - пауза в миллисекундах PAUSE перед следующим нажатием или вводом текста Примечание: в одной команде buttn может быть один класс окна CLASS и сколько угодно параметров BUTTONID(...) и TextID(...) CLASS||BUTTONID1(...)||BUTTONIDN(...)||TextID1(...)||TextIDN(...)
Описание команды выглядит немного страшновато, но это на первый взгляд)
Итак начнём. Возьмём простой пример: вызвать окно настройки расцветки файлов
Для этого нам надо: 1. Вызвать окно "Настройки - Цвета" 2. Нажать на кнопку "Определить цвета для типов файлов" (Если делать это с помощью эмуляции клавиатурных нажатий, то нужно вызвать окно+выдержать несколько пауз +17 раз нажать TAB+ENTER)
1. Чтобы вызвать "Настройку - Цвета" воспользуемся командой tcimg , а именно tcimg=$cm494 2. Установим паузу, получаем tcimg=$cm494~~$s1 3. Теперь надо определить класс окна и Идентификатор элемента управления кнопки Для этого воспользуемся утилитой Au3Info Так же можно воспользоваться утилитой Control Viewer - Просмотр информации элементов окна ....a) Запускаем утилиту
....б) Запускаем окно "Настройку - Цвета"
....в) Удерживая левой кнопкой мыши курсор с мишенью перетаскиваем его на окно "Настройку - Цвета"
В окне CLASS мы видим класс окна, который вносим в кнопку в команду buttn
Стабильность и Эстетичность при переключении настроек Total Commander с использованием вызова различных окон настроек.
На протяжении многих лет идёт работа по автоматизации переключений тех или иных настроек Total Commander. Есть десятки утилит и программ помогающие пользователям делать это быстро, не вникая в настройки и сам процесс. Но ряд проблем всё же оставались.
Возьмём простой пример. Перед нами стоит задача переключения расцветки файлов.
Как это сделать. 1. Вызвать диалог настроек Цвета (команда cm_ColorConfig) 2. Снять или установить галочку напротив "Определить цвета для типов файлов" 3. Нажать "Применить" и "ОК"
Как это автоматизировать 1. Вызвать команду 2. 16 раз нажать TAB (или 5 раз Shift TAB) 3. Нажать Пробел и ENTER
Как это можно решить 1. Скриптом и утилитой, которая умеет посылать команды Total Commander 2. Через TCIMG
Но оставались ряд проблем: 1. Как определить паузу между появлением окна настроек и нажатием клавиш. На медленных "машинах" нажатие прошло, а окно ещё не открылось, что приводило к непредсказуемым последствиям, потому что все нажатия происходили в панелях тотала. 2. Эмуляция клавиатурных нажатий. (непредсказуемость) 3. Появление и исчезновение окна настроек. (выглядит всё это честно сказать не красиво)))
Со временем получилось избежать эмуляции, а именно командой buttn (описание в предыдущей теме), появилась кнопка
1. Проблемы с паузой отпали 2. Эмуляции нет 3. Открытие и закрытие окна настроек не наблюдается
В утилите TCIMG 2.6 beta 3 появилась возможность оптимизировать процесс переключении настроек Total Commander с использованием вызова окон. Ниже будут рассмотрены новые параметры команды buttn
1. Параметр $h - ожидает появление окна и скрывает его (если возможно)
Код
"tcimg=$cm905 buttn=TInpComboDlg||TButton1|$h" - отправка выделенного в очередь копирования "focusp tcimg=$cm521 buttn=TCOMBOINPUT||Edit1|$i*.%E|$h||TButton3" - выделить в панели назначения только файлы с расширением файла под курсором "focusp tcimg=$cm521 buttn=TCOMBOINPUT||Edit1|$i*.%E|$h||TButton3 tcimg=$cm2023" - выделить в панели назначения только файлы с расширением файла под курсором и оставить только выделенные "tcimg=$cm314 buttn=TCOMBOINPUT||Edit1|$i``*$h||TButton3" - Отображать только файлы "tcimg=$cm314 buttn=TCOMBOINPUT||Edit1|$i``*$h||TButton3 focusp tcimg=$cm303" - Отображать только файлы + в другой панели дерево
Примеров можно приводить масса, итог один: раньше мы видили мелькание окна, сейчас нет.
Но, к сожалению не везде это удалось побороть, к примеру:
Код
"tcimg=$cm519 buttn=TDlgCustomColors||TButton2|$h" - обновление внутренних ассоциаций
окно всё равно остаётся, но при этом увеличена скорость исчезновения.
2. Параметр $w - ожидает активизации окна Решение проблемы с паузой
Так же были созданы другие команды, позволяющие изменять настройки, скрывая окно... sizeb - установка размера значков в файловых панелях в Total Commander sizef - установка размера/толщины шрифта в Total Commander sfont - установка шрифта в Total Commander
В другие параметры так же добавлены подобные параметры
Код
"tcimg=$cm498 bufsr=##wintxt<1|TBUTTONCHANGEDLG|0|TMyPanel1|1|#hide#>" - отправить в буфер путь текущей панели панели инструментов Total Commander
Испытания и тестирование продолжаются. Присоединяйтесь к этому историческому процессу.
Как известно, что при использовании поиска (команда cm_SearchFor) невозможно пользоваться Total Commander, пока его не закрыть
Следующие параметры решают эту проблему 4. Параметр $aCLASS - разрешает доступ к заданному окну после всех действий, где CLASS - класс окна (по умолчанию TTOTAL_CMD, если CLASS не указан)
Код
"tcimg=$cm501 buttn=TFindFile||x|$a" - поиск файлов с активизацией окна Total Commander
5. Параметр $mN - после всех действий, где N - номер задачи. 1 - свернуть, 2 - развернуть, 3 - восстановить свёрнутое или развёрнутое окно, 4 -запретить доступ, 5 - разрешить доступ (если это возможно)
Код
"tcimg=$cm501 buttn=TFindFile||Edit3|$iclpget||TButton14|$a|$m1" - поиск файлов, взяв в качестве имени содержимое буфера обмена, свернуть окно поиска и активизировать окно Total Commander
6. Параметр $kX:Y(:W:H) - перемещение окна после всех действий, где X - новая x-координата (# - не перемещать по x), Y - новая y-координата (# - не перемещать по y), W - Новая ширина окна, H - Новая высота окна (если это возможно)
Код
"tcimg=$cm501 buttn=TFindFile||Edit3|$iclpget||TButton14|$a|$m1|$k0:0" - поиск файлов, взяв в качестве имени содержимое буфера обмена, свернуть окно поиска в верхний левый угол и активизировать окно Total Commander
7. Параметр $pPARENCY - ожидает появление окна и делает его прозрачным, где PARENCY - Число в диапазоне 0 - 255. Чем меньше число, тем более прозрачность окна. 255 = непрозрачно, 0 = невидимое.
Код
"tcimg=$cm501 buttn=TFindFile||Edit3|$iclpget||TButton14|$a|$p230" - поиск файлов, взяв в качестве имени содержимое буфера обмена, сделать окно поиска прозрачным на 10% и активизировать окно Total Commander
Код
"tcimg=$cm501 buttn=TFindFile||Edit3|$iclpget||TButton14|$a" - Поиск файла, содержащих ИМЯ из буфера обмена "tcimg=$cm501 buttn=TFindFile||Edit3||TCheckBox11||Edit1|$iclpget||TButton14|$a" - Поиск файлов, содержащих ТЕКСТ из буфера обмена "tcimg=$cm501 buttn=TFindFile||Edit3||TCheckBox11||TCheckBox7||Edit1|$i%M||TButton14|$a" - Поиск файлов, содержащих ИМЯ элемента другой панели "tcimg=$cm501 buttn=TFindFile||Edit3||TCheckBox11||TCheckBox7||Edit1|$iclpget||TButton14|$a" - Поиск файлов, НЕ содержащих ТЕКСТ из буфера обмена "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_имени buttn=TFindFile||TButton14|$a" - Поиск дубликатов по ИМЕНИ "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_имени_и_размеру buttn=TFindFile||TButton14|$a" - Поиск дубликатов по ИМЕНИ и РАЗМЕРУ "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_размеру buttn=TFindFile||TButton14|$a" - Поиск дубликатов по РАЗМЕРУ "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_содержимому buttn=TFindFile||TButton14|$a" - Поиск дубликатов по СОДЕРЖИМОМУ "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_всему buttn=TFindFile||TButton14|$a" - Поиск дубликатов по ВСЕМУ СРАЗУ
Испытания и тестирование продолжаются. Присоединяйтесь к этому историческому процессу. Все обсуждения статьи, предложения, сообщения об ошибках можно в этой теме или в теме TCIMG
Автоматизация переключений настроек в 32 и 64 битном Total Commander
или очередной "подход к снаряду"
Изучая Total Commander, а именно работу с окнами и автоматизацию переключений некоторых настроек, выявились ряд проблем:
1. В 32 и 64 Total Commander разные классы окон (есть совпадение, но в 95% случаях они отличаются. Это видимо, что 64 был переписан на Freepascal/Lazarus)
К примеру, если посмотреть класс панели инструментов, то в 32 - TButtonBar1 в 64 - Window4
__
2. Второй проблемой стала выявление "плавающих" классов и инстанций т.е. при разных настройках одни и те же элементы имеют различные классы или инстанции К примеру, элемент "Строка состояния" при включенной панели выбора дисков показывает:
в левой панели - TMyPanel5 в правой панели - TMyPanel8 при выключенной панели выбора дисков в левой панели - TMyPanel7 в правой панели - TMyPanel10
Или класс TMyListBox в обычном положении в левой панели - TMyListBox2 в правой панели - TMyListBox1 при включенном FTP в левой панели - TMyListBox3 в правой панели - TMyListBox2
3. Есть ещё ряд проблем, но как-нибудь в следующий раз
Кстати, большую часть времени я работаю на Total Commander 32, и проверяя на Total Commander 64 ряд утилит и скриптов других авторов, так же столкнулся с тем, что они не работают на 64 (видимо из-за неправильного определения классов)
Вот ряд решений, которые были предприняты для утилитыTCIMG
1. Была создана библиотека классов для обеих разрядностей - TCIMG3264.ini - это обычный ini файл с двумя секциями [TOTALCOM32] и [TOTALCOM64], где ключи для обеих секций одинаковы, а значения соответствуют битности.
Для того, чтобы вышеописанные в этой теме кнопки работали не только для 32, но 64 bit программе, необходимо подставлять соответствующие ключи, добавляя перед ними +tc.
"tcimg=$cm519 buttn=TDlgCustomColors||+tcTCIASS5|$h" - обновление внутренних ассоциаций "tcimg=$cm482 buttn=TDLGCONFIGALL||+tcTCSGR9|$w" - настройка типов файлов (режим эскизы) "tcimg=$cm2400 buttn=TMultiRename||x|$a" - групповое переименование (в фоновом режиме) "tcimg=$cm905~$s1 buttn=TInpComboDlg||+tcTCCOPY7" - посылание выделенного в очередь копирования "tcimg=$cm906~$s1 buttn=TInpComboDlg||+tcTCCOPY7" - посылание выделенного в очередь перемещения "tcimg=$cm509 buttn=TDLGUNZIPALL||TAltEdit1|$h||TCheckBox1||TButton4" - распаковать архивы в одноимённые папки активной панели "tcimg=$cm501 buttn=TFindFile||+tcTCFIND2|$iclpget||+tcTCFIND23|$a" - поиск файла, содержащих ИМЯ из буфера обмена "tcimg=$cm501 buttn=TFindFile||+tcTCFIND2||+tcTCFIND12||+tcTCFIND13|$iclpget||+tcTCFIND23|$a" - поиск файлов, содержащих ТЕКСТ из буфера обмена "tcimg=$cm501 buttn=TFindFile||+tcTCFIND2||+tcTCFIND12|||$i%M||+tcTCFIND23|$a" - поиск файлов, содержащих ИМЯ элемента другой панели "tcimg=$cm501 buttn=TFindFile||+tcTCFIND2||+tcTCFIND12||+tcTCFIND18||+tcTCFIND13|$iclpget||+tcTCFIND23|$a" - поиск файлов, НЕ содержащих ТЕКСТ из буфера обмена "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_имени buttn=TFindFile||+tcTCFIND23|$a" - поиск дубликатов по ИМЕНИ "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_имени_и_размеру buttn=TFindFile||+tcTCFIND23|$a" - поиск дубликатов по ИМЕНИ и РАЗМЕРУ "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_размеру buttn=TFindFile||+tcTCFIND23|$a" - поиск дубликатов по РАЗМЕРУ "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_содержимому buttn=TFindFile||+tcTCFIND23|$a" - поиск дубликатов по СОДЕРЖИМОМУ "tcprm=LOADSEARCH||<Дубликаты>_Поиск_Дубликатов_по_всему buttn=TFindFile||+tcTCFIND23|$a" - поиск дубликатов по ВСЕМУ СРАЗУ "tcprm=LOADSEARCH||<Каталог>_Каталоги_1-го_уровня buttn=TFindFile||+tcTCFIND23|$s500||+tcTCFIND70" - поиск Каталогов 1-го_уровня + вывод результата "tcimg=$cm521 buttn=TCOMBOINPUT||+tcTCMARK1|$i><Графика>_Opera_cache|$h||+tcTCMARK5"
"tcimg=$cm498 buttn=TBUTTONCHANGEDLG||+tcTCCUZBAR6|$i20|$h||+tcTCCUZBAR22" - панель при экране 800 "tcimg=$cm498 buttn=TBUTTONCHANGEDLG||+tcTCCUZBAR6|$i24|$h||+tcTCCUZBAR22" - панель при экране 1024 "tcimg=$cm498 buttn=TBUTTONCHANGEDLG||+tcTCCUZBAR6|$i27|$h||+tcTCCUZBAR22" - панель при экране 1152 "tcimg=$cm498 buttn=TBUTTONCHANGEDLG||+tcTCCUZBAR6|$i31|$h||+tcTCCUZBAR22" - панель при экране 1280 "tcimg=$cm498 buttn=TBUTTONCHANGEDLG||+tcTCCUZBAR6|$i34|$h||+tcTCCUZBAR22" - панель при экране 1400
"tcimg=$cm314 buttn=TCOMBOINPUT||+tcTCFILTER1|$i``*\|$h||+tcTCFILTER5" - отображать только файлы "tcimg=$cm314 buttn=TCOMBOINPUT||+tcTCFILTER1|$i``*\|$h||+tcTCFILTER5 focusp tcimg=$cm303" - отображать только файлы + в другой панели дерево
"focusp tcimg=$cm521 buttn=TCOMBOINPUT||+tcTCMARK1|$i*.%E|$h||+tcTCMARK5" - выделить в панели назначения только файлы с расширением файла под курсором "focusp tcimg=$cm521 buttn=TCOMBOINPUT||+tcTCMARK1|$i*.%E|$h||+tcTCMARK5 tcimg=$cm2023" - выделить в панели назначения только файлы с расширением файла под курсором и оставить только выделенные
"tcimg=$cm482 buttn=TDLGCONFIGALL||+tcTCSGR9|$w" - настройки данных о типах файлов "tcimg=$cm486 buttn=TDLGCONFIGALL||+tcTCSCP19|$w" - настройка дополнительных данных "tcimg=$cm494 buttn=TDLGCONFIGALL||+tcTCSCL19|$w" - настройка расцветки файлов "tcimg=$cm494 buttn=TDLGCONFIGALL||+tcTCSCL18|$h||+tcTCSCL21" - отключение/включение раскраски файлов
"tcimg=$cm483 buttn=TDLGCONFIGALL||+tcTCSSC3|$w" - вызвать окно настройки нового набора колонок "tcimg=$cm483 buttn=TDLGCONFIGALL||+tcTCSSC3|$w buttn=TCustomColumnForm||+tcTCSSCSC4|$w" - вызвать окно настройки нового набора колонок "tcimg=$cm483 buttn=TDLGCONFIGALL||+tcTCSSC3|$w buttn=TCustomColumnForm||+tcTCSSCSC4|$w||+tcTCSSCSC3" - вызвать окно настройки нового набора колонок+вызов плагинов
"tcimg=$cm509 buttn=TDLGUNZIPALL||+tcTCUNPACK1|$h||+tcTCUNPACK6||+tcTCUNPACK7" - распаковать выделенные архивы в текущую панель, каждый в именной каталог "tcimg=$cm509 buttn=TDLGUNZIPALL||+tcTCUNPACK6|$h||+tcTCUNPACK7" - распаковать выделенные архивы в панель назначения, каждый в именной каталог "tcimg=$cm509 buttn=TDLGUNZIPALL||+tcTCUNPACK7|$h" - распаковать выделенные архивы в панель назначения "tcimg=$cm509 buttn=TDLGUNZIPALL||+tcTCUNPACK1|$h||+tcTCUNPACK7" - распаковать выделенные архивы в текущую панель "tcimg=$cm509 buttn=TDLGUNZIPALL||+tcTCUNPACK1|$h||+tcTCUNPACK7 pause=1000 delss=%L||1" - распаковать выделенные архивы в текущую панель и удалить исходные архивы
"tcimg=$cm508 buttn=TDLGZIP||+tcTCPACK5|$h" - упаковать в другую панель в различные форматы, удаляя исходники
"tcimg=$cm490 buttn=TDLGCONFIGALL||x|$a" - настройка Total Commander в фоновом режиме
"tcimg=$cm2924 pause=10000 buttn=TCmdSelForm||x|$a" - Список команд Total Commander (паузу можно уменьшить)
"swcmd=tcimg=$cm314÷÷buttn=TCOMBOINPUT||+tcTCFILTER1|$i``*\|$h||+tcTCFILTER5¦¦tcprm=cd~~|~~*.*¦¦tcimg=$cm312¦¦FileFolderPanel" - отображать только файлы | только папки | все объекты (переключение по кругу)
"swcmd=trans=192||$TTOTAL_CMD¦¦trans=255||$TTOTAL_CMD¦¦Transparency" - Прозрачность Total Commander Вкл/Выкл
"swcmd=ontop=1||$TTOTAL_CMD¦¦ontop=0||$TTOTAL_CMD¦¦OnTop" - Поверх всех окон Total Commander Вкл/Выкл
"swcmd=whide=$TTOTAL_CMD||+tcTOTAL3¦¦wshow=$TTOTAL_CMD||+tcTOTAL3¦¦HideShow" - Скрыть/Отобразить элемент Total Commander
2. Для "плавающих" классов и инстанций значения представляют такую вот "хитрую" запись:
что означает: при DriveCombo=1 в секции Layout в файле Wincmd.ini класс строки состояния слева TMyPanel5 при DriveCombo=0 ... TMyPanel7
при DriveCombo=1 в секции Layout в файле Wincmd.ini класс строки состояния справа TMyPanel8 при DriveCombo=0 ... TMyPanel10
Конечно возможны несоответствия в файле TCIMG3264.ini и не все "плавающие" классы выявлены, но испытания и тестирование продолжаются. Присоединяйтесь к этому историческому процессу.
Все обсуждения статьи, предложения, сообщения об ошибках можно в этой теме или в теме TCIMG [ps] Для того, чтобы быстрее искать нужный раздел с классами, вы можете использовать Ini.coder - файл подсветки (для AkelPad), который отображает при функции "Отображать блоки и списки..." все названия основных окон Total Commander[/ps]
В утилите TCIMG 2.8 beta 15 появились дополнительные параметры автоматизации:
Параметр $g - ожидает доступности элемента
В некоторых процессах необходимо дождаться, когда тот или иной элемент окна будет доступным. К примеру, если стоит задача вывести найденные файлы на панель. Тут возникает одна проблема: невозможно поставить паузу, ведь нельзя узнать когда закончится поиск, Параметр $g решает это:
Но есть но... в данном примере. А именно при поиске файлы могут не найтись, и тогда кнопка "Файлы на панель останется серой", при этом активируется кнопка "Новый поиск".
Данную проблему решает следующий параметр:
Параметр $d(+tcKEY)BUTTONID - ожидает доступности элемента, если элемент, дескриптор которого задан после параметра (+tcKEY)BUTTONID доступен, то завершается работа утилиты
В итоге появилась стабильная кнопка, не требующая пауз...
"tcimg=$cm501 buttn=TFindFile||+tcTCFIND2|$i*avi;*.mpg||+tcTCFIND23||+tcTCFIND70|$d+tcTCFIND68" - поиск файлов avi, mpg, , вывод файлов на панель, если ничего не найдено, то дальнейшие действия прекращаются "tcimg=$cm501 buttn=TFindFile||+tcTCFIND2|$iabc*||+tcTCFIND23||+tcTCFIND70|$d+tcTCFIND68" - поиск файлов по первым буквам abc, , вывод файлов на панель, если ничего не найдено, то дальнейшие действия прекращаются
У меня с некоторых пор слетела настройка цветов файлов по датам (времени). С настройкой цветов я, в принципе, разобралась. Но есть ли возможность вернуть эти настройки одним движением руки, как было изначально в Тотал? Лариса
Вставка для Total Commander - "Insert", как альтернативный вариант, ориентированный для тяжеловесных сборок, который можно комбинировать по своему усмотрению, по мере использования, из файлов родительского Total Commander.