Описание и назначение

Autorun — это простой контентный плагин для выполнения некоторых действий при запуске Total Commander. Плагин начинался как сугубо персональный проект, служивший для объединения различных автозапускаемых действий в единый интерфейс. Сейчас в основном разрабатывается для удобства изготовления портабельной сборки. Он покрывает практически весь необходимый функционал автозапуска. Для более сложных или специфических действий будет целесообразнее выполнить скрипт или написать плагин на традиционном языке программирования.

Autorun представляет собой простой командный процессор, выполняющий команды, заданные в файле конфигурации. Все команды выполняются в отдельном потоке и не должны приводить Total Commander к подвисанию даже в случае проблем с одной из них. Есть возможность использования переменных и простого If..Else условия.

Autorun должен работать на любой ОС от Win2000 до Win10, в настоящее время тестируется на Win7 x64 и Win10 x64.


Установка

Перед установкой плагина рекомендуется заранее переименовать файл autorun.example.cfg в autorun.cfg, можно сразу отредактировать его. Установка плагина происходит по обычной схеме. Далее, чтобы реализовать автозапуск при старте Total Commander, нужно создать цветовую схему следующим образом:

  • На странице настроек «Цвета» нажать кнопку «Определить цвета для типов файлов».
  • В диалоге «Определить цвета для типов файлов» поставить курсор в любое место списка и нажать кнопку «Добавить».
  • Нажать кнопку «Шаблон».
  • В диалоге «Выбор шаблона» перейти на вкладку «Плагины».
  • Выбрать в выпадающем списке плагинов autorun.
  • Выбрать в выпадающем списке свойств Autorun (других там не будет).
  • Выбрать в выпадающем списке операций = и ввести в следующем поле любое целое число, например, 1.
  • Нажать кнопку «Записать», назвать как-либо шаблон, например, Autorun.
  • Далее последовательно нажимать кнопку OK во всех диалогах до выхода из всех настроек.
  • Перезапустить TC.

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

Плагин может быть переименован, в этом случае нужно переименовать и файл конфигурации.


Файл конфигурации

Файл конфигурации — это обычный текстовый файл, в кодировке ANSI или любой юникодной: UTF-16LE, UTF-16BE, UTF8, UTF8+BOM.

Плагин оперирует двумя секциями в файле конфигурации. Первая секция выполняется при запуске TC, вторая — при завершении. Секция выхода начинается после директивы:

Pragma AutorunFinalizeSection


Основы

В Autorun действия выполняются посредством команд. Каждая команда в Autorun располагается на одной строке. Команда может включать в себя обязательные параметры, необязательные параметры и переключатели. Порядок регламентирован следующим образом: команда, переключатели, обязательные параметры, необязательные параметры.

Все переключатели должны начинаться с «/» и находиться перед любыми параметрами. Переключатели предназначены для изменения поведения функции в отношении её поведения по умолчанию. Все переключатели необязательны.

В этой справке обязательные параметры указываются в угловых скобках: <параметр>. Если параметр необязателен, он дополнительно заключается в квадратные скобки: [<параметр>]. Поскольку все переключатели являются необязательными, они также заключаются в квадратные скобки: [/A].

Если команда возвращает значение, переменная, куда будет записан результат, всегда размещается первой в списке параметров (но после переключателей).

Строка, начинающаяся с символа #, трактуется как комментарий и игнорируется. Если за # следует символ {, это трактуется как начало многострочного комментария, если } — как конец многострочного комментария. Внутри блока многострочных комментариев могут быть как простые комментарии, так и вложенные блоки многострочных комментариев.

#{
многострочный
комментарий

#{
вложенный
многострочный
комментарий
#}

# обычный комментарий

#}

Пустые строки игнорируются.

Все параметры и переключатели разделяются пробелом. Если в параметре команды должен использоваться пробел, параметр должен быть взят в кавычки — двойные или одинарные. При этом кавычки другого типа могут быть использованы в тексте параметра. Например:

"параметр с пробелами"
'параметр с пробелами'
"параметр с пробелами и 'кавычками'"
'параметр с пробелами и "кавычками"'

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

Пример:

"этот ""текст"" и этот 'текст' в кавычках"
'этот "текст" и этот ''текст'' в кавычках'


Директивы

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

Pragma AutorunFinalizeSection

Часть скрипта после этой директивы обрабатывается при завершении Total Commander.

Pragma AutorunBlockUnload

Блокирует выгрузку плагина (командой cm_UnloadPlugins) до полного закрытия Total Commander. Полезно для использования ShellExec с ключом /T. Если директива отсутствует, блокировка выключена.

Pragma AutorunLanguage <ID>

Загружает пользовательский язык сообщений из файла autorun.lng. Если эта директива не используется, будет использован язык по умолчанию (английский). Поскольку все сообщения плагина — это сообщения об ошибках, имеет смысл использовать эту директиву только во время отладки.

ID Двух-трехсимвольный идентификатор языка, принятый в языковых файлах Total Commander. Файл autorun.lng должен содержать секцию с таким же именем. Если секция не найдена, будет использован английский язык.

Pragma AutorunAllowWriteEnv

По умолчанию команды, возвращающие значения, могут записывать результат только в переменные. Эта директива разрешает запись в существующие переменные окружения.

Pragma AutorunLoadInSubrocess

По умолчанию Autorun не будет запускаться, если TC запущен как отдельный процесс поиска/просмотра/и т.д. Но вы можете изменить такое поведение с этой директивой.


Переменные

Плагин оперирует двумя типами переменных — внутренними и переменными окружения. Единственное различие между ними только в том, что внутренние переменные видимы только в плагине, а переменные окружения доступны для Total Commander и запускаемых из него программ.

В общем виде имя переменной может состоять только из латинских букв, цифр и символа подчеркивания «_». Внутренние переменные задаются командой Set, а переменные окружения — SetEnv. При использовании переменных в командах Autorun не делает между ними принципиального различия и может получать их значения как из тех, так и других, однако запись из команд возможна только во внутренние переменные (очевидное исключение — SetEnv). Это поведение можно изменить директивой AutorunAllowWriteEnv.

При использовании переменных в командах следует придерживаться простого правила: если значение переменной читается («разворачивается»), то переменная должна быть записана с использованием обрамляющих символов процента «%». Если же в переменную производится запись (команды Set, SetEnv и некоторые другие), то ее имя записывается как есть. Пример:

Set MY_COMMANDER_PATH %COMMANDER_PATH%

В примере выше значение переменной окружения COMMANDER_PATH будет прочитано и записано в переменную MY_COMMANDER_PATH.

Предопределенные переменные

Плагин имеет несколько предопределенных переменных (констант):

%AUTORUN_TCHANDLE% | Хэндл окна Total Commander (для использования в скриптах).
%AUTORUN_TCPID% | ID процесса Total Commander (для использования в скриптах).
%AUTORUN_ISADMIN% | 1, если TC запущен под админом, иначе 0.
%AUTORUN_TCARCH% | 32 или 64 — архитектура TotalCommander, где загружен плагин.
%AUTORUN_TCCMDLINE% | Командная строка TotalCommander.

Переопределять предопределенные константы нельзя.

Дополнительные константы с системной информацией доступны в плагине SysInfo.

Переменная ERROR

Autorun имеет специальную переменную ERROR. Она обычно равна нулю, но некоторые команды могут устанавливать ее в другое значение в случае нефатальных ошибок (см. документацию к командам). Если вам необходима эта информация, проверяйте значение переменной сразу после выполнения команды, поскольку следующая команда может изменить значение переменной.


Условия

Плагин имеет единственное простое условие сравнения:

If [Not] <выражение 1> Then
  ...
ElseIf [Not] <выражение 2> Then
  ...
Else
  ...
EndIf

Для числового сравнения могут использоваться операторы =, <>, >, <, >=, ?. Для строчного сравнения разрешены только = и <>, сравнение регистронезависимое. Разрешены скобки и операторы AND и OR. Если оба выражения числовые, используется числовое сравнение.

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

If ("%var_with_spaces%" = "value") Then

Также некоторые специальные функции могут быть использованы в условии. При этом условие ограничено только одной функцией.

If [Not] Function1 <параметры> Then
  ...
ElseIf [Not] Function2 <параметры> Then
  ...
Else
  ...
EndIf

Допустимо в одном условии (но в разных ветвях) использовать как выражения, так и функции.


CommandExec

CommandExec [/CD[:{T|S|TS}]] <команда/путь1> [<путь2>]

Выполнить пользовательскую команду em_* или установить в панелях заданные пути.

Параметры

команда/путь1 | В случае выполнения внутренней команды этот параметр должен быть равен имени пользовательской команды (обычно они начинаются с префикса em_). В случае установки путей в панелях этот параметр должен содержать первый путь.
путь2 | В случае установки путей в панелях этот параметр должен содержать второй путь.

Переключатели

[/CD] Этот переключатель позволяет установить пути в панелях Total Commander. После переключателя через двоеточие допустимы следующие флаги, задающие способ открытия каталогов:
T — открыть в новой вкладке
S — делает первый путь источником, второй — получателем, иначе левая и правая панели соответственно
ST — комбинация флагов

Примеры

# открывает диалог настроек
CommandExec cm_Config

# выполняет пользовательскую команду "em_UserCommand1"
CommandExec em_UserCommand1

# открывает путь "C:\Windows" в левой панели
CommandExec /CD "C:\Windows"

# открывает путь "C:\Windows" в правой панели (обратите внимание на пустой первый параметр)
CommandExec /CD "" "C:\Windows"

# открывает путь "C:\Windows" в новой вкладке левой панели
CommandExec /CD:T "C:\Windows"

# открывает путь  "C:\Windows" в панели-источнике, путь "D:\Test" в панели-цели
CommandExec /CD:S "C:\Windows" "D:\Test"

# открывает путь "C:\Windows" в новой вкладке панели-источника,
# путь "D:\Test" в новой вкладке панели-цели
CommandExec /CD:ST "C:\Windows" "D:\Test"


Exit

Exit

Прерывает выполнение скрипта.


IniDelete

IniDelete [/R] <ini> <секция> [<ключ>]

Удаляет ключ или секцию из заданного файла конфигурации.

Параметры

ini | Имя ini-файла. Может содержать переменные или переменные окружения.
секция | Имя секции в ini-файле.
ключ | Имя ключа в ini-файле. Если параметр не задан, секция будет стерта целиком. Используйте осторожно!

Переключатели

/R Команда будет учитывать наличие ключа RedirectSection в заданной секции.

Связанные

IniRead, IniWrite

Пример

Удаляет из конфигурации Total Commander ключ «test» в секции «Configuration»:

IniDelete %COMMANDER_INI% Configuration test


IniRead

IniRead [/R] <переменная> <ini> <секция> <ключ> [<текст по умолчанию>]

Читает значение из заданного файла конфигурации.

Параметры

переменная | Имя переменной, в которое будет записано значение.
ini | Имя ini-файла. Может содержать переменные или переменные окружения.
секция | Имя секции в ini-файле.
ключ | Имя ключа в ini-файле.
текст по умолчанию | Текст, который будет записан в переменную, если ключ отсутствует в файле. Если параметр опущен, будет записано пустое значение.

Переключатели

/R Команда будет учитывать наличие ключа RedirectSection в заданной секции.

Связанные

IniDelete, IniWrite

Пример

Читает из конфигурации Total Commander значение ключа «test» в секции «Configuration»:

IniRead MYVAR %COMMANDER_INI% Configuration test


IniWrite

IniWrite [/EV-][/R] <ini> <секция> <ключ> [<текст>]

Записывает значение в заданный файл конфигурации. В случае невозможности записи команда устанавливает переменную %ERROR% в 1.

Параметры

ini | Имя ini-файла. Может содержать переменные или переменные окружения.
секция | Имя секции в ini-файле.
ключ | Имя ключа в ini-файле.
текст | Текст, который будет записан для заданного ключа ini-файла. Если параметр опущен, будет записано пустое значение.

Переключатели

/EV- | Отключает использование переменных и переменных окружения в тексте.
/R | Команда будет учитывать наличие ключа RedirectSection в заданной секции.

Связанные

IniDelete, IniRead

Пример

Записывает в конфигурацию Total Commander значение 1000 для ключа «test» секции «Configuration»:

IniWrite %COMMANDER_INI% Configuration test 1000


FileExist

FileExist <переменная> <файл>
FileExist <файл>

Команда доступна для непосредственного вызова и вызова из условия. При непосредственном вызове первый параметр должен быть именем переменной, в которую будет записан 0 или 1 в зависимости от результата выполнения.

Параметры

переменная | Имя переменной, в которую будет записан результат функции (при прямом вызове).
файл | Имя файла, существование которого будет проверяться. Может содержать переменные или переменные окружения.

Переключатели

Нет.

Пример

Определяет наличие каталога:

If FileExist "C:\Program Files (x86)" Then
...
EndIf


GetUptime

GetUptime <переменная>

Команда получает число миллисекунд, прошедших с момента запуска системы. Можно применить для оценки задержек, создаваемых запускаемыми в конфигурации командами.

Параметры

переменная Имя переменной, в которую будет записан результат функции.

Переключатели

Нет.

Пример

GetTimer T1
...
GetTimer T2
...
GetTimer T3

Set /C Diff1 %T2%-%T1%
Set /C Diff2 %T3%-%T2%


LngRead

Команда читает строку из заданного языкового файла Total Commander.

LngRead <переменная> <идентификатор> [<имя файла>]

Параметры

переменная | Имя переменной, в которое будет записано значение.
идентификатор | Идентификатор строки в языковом файле.
имя файла | Имя языкового файла для загрузки. Если параметр опущен, используется файл, загруженный в предыдущем вызове.

Примечания

Первый вызов команды должен быть выполнен с параметром «имя файла», при этом команда кэширует список всех строк из заданного файла. При последующих вызовах имя файла может быть опущено. При вызове с другим именем файла строки в кэше заменяются на строки из нового файла.

Кодировка файла определяется автоматически. Если файл сохранен как ANSI, то команда пытается получить значение в строке «codepage» и использовать его. Если такой строки нет, используется системная кодовая страница.

Если заданный идентификатор не существует, команда возвращает пустое значение и устанавливает переменную ERROR в 1.


LoadFont

LoadFont [/N] <шрифт>

Команда, загружающая выбранный шрифт. По умолчанию шрифт будет доступен только процессу Total Commander и будет выгружен при его закрытии.

Параметры

шрифт Имя шрифта. Может содержать переменные или переменные окружения.

Переключатели

/N позволяет другим приложениям использовать этот шрифт. Имейте в виду, что шрифт станет недоступен после закрытия Total Commander.

Примечания

Поддерживаемые шрифты:

.fnt | файл шрифта Raw bitmap
.ttf | файл шрифта TrueType
.ttc | коллекция шрифтов TrueType (для восточно-азиатских Windows)
.fot | файл ресурсов TrueType
.otf | файл шрифта PostScript OpenType
.mmm | файл шрифтовых ресурсов Multiple master Type1, должен использоваться с файлами .pfm или .pfb
.pfb | файл бинарных данных Type 1. Используется с файлами .pfm
.pfm | файл метрик Type 1, используется с файлами .pfb

Для добавления шрифтов, состоящих из нескольких файлов, они должны разделяться символом «|». Например, abcxxxxx.pfm|abcxxxxx.pfb.


LoadLibrary

LoadLibrary [/U] <dll> [<функция>]

Команда, загружающая заданную динамическую библиотеку. Также можно выполнить функцию без параметров.

Параметры

dll | Имя динамической библиотеки. Может содержать переменные или переменные окружения. Пути также могут быть относительными к пути, где находится файл конфигурации.
функция | Функция, которая будет выполнена сразу после загрузки библиотеки. Функция не должна иметь параметров и возвращать результат.

Переключатели

/U немедленно выгружает библиотеку после загрузки и выполнения функции (если она задана).

Примечания

Обратите внимание, что под 64-битной версией вы можете загружать только 64-битные библиотеки и плагины, под 32-битной — только 32-битные.

Для простоты использования плагинов и возможности использования единого файла конфигурации в разных версиях TC для 64-битных версий плагинов используется неявная загрузка. Для этого 64-битная версия плагина должна иметь расширение «dll64». При этом в файле конфигурации прописывается имя библиотеки с расширением «dll».

На примере плагина ModifyDialogs: запись в файле конфигурации «LoadLibrary Plugins\Autorun_ModifyDialogs.dll». Под 32-битной версией TC будет загружена библиотека Autorun_ModifyDialogs.dll, под 64-битной — Autorun_ModifyDialogs.dll64.


MsgBox

MsgBox <text> [<title>]

Простое сообщение, может быть полезно для целей отладки. Обратите внимание: команда не всегда работает на 64-битной версии Total Commander.

Parameters

text | Текст сообщения
title | Заголовок сообщения


RegRead

RegRead [/HEX] <переменная> <ключ> [<параметр> [<текст по умолчанию>]]

Читает значение из реестра. Поддерживаются параметры типа REG_DWORD, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_BINARY (возвращается hex-строка).

Параметры

переменная | Имя переменной, в которое будет записано значение.
ключ | Имя ключа реестра. Может начинаться как с полного наименования (например, HKEY_USERS), так и с сокращенного (например, HKU).
параметр | Имя параметра. Чтобы получить значение ключа «по умолчанию», не задавайте это имя или используйте пустое значение, если надо задать текст по умолчанию.
текст | Текст, который будет записан в переменную, если не удастся прочитать ключ реестра. Если параметр опущен, будет записано пустое значение.

Переключатели

/HEX | Возвращает параметр типа REG_DWORD в виде hex-строки, иначе — в десятичном виде.
/I:xxx | Индекс строки (начинается с 1) для параметра REG_MULTI_SZ. Если не задан, строка возвращается целиком с разделителем строк.


RegWrite

RegWrite <ключ> <параметр> <тип> <значение> [<значение2>..<значениеN>]

Записывает значение в реестр. Поддерживаются параметры типа: REG_DWORD, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_BINARY.

Параметры

ключ | Имя ключа реестра. Может начинаться как с полного наименования (например, HKEY_USERS), так и с сокращенного (например, HKU).
параметр | Имя параметра. Чтобы установить значение ключа «по умолчанию», используйте пустое значение.
тип | Тип значения. Может быть одно из: REG_DWORD, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_BINARY.
значение | Значение, которое будет записано в реестр. Для типа REG_MULTI_SZ значений может быть несколько, при этом каждое значение записывается в отдельную строку.

Примечания

При записи параметра с типом REG_BINARY, значение должно быть в виде hex-строки. В случае ошибки записи переменная %ERROR% будет установлена в 1.


RegDelete

RegDelete [\K] <ключ> [<параметр>]

Удаляет значение или ключ из реестра.

Параметры

ключ | Имя ключа реестра. Может начинаться как с полного наименования (например, HKEY_USERS), так и с сокращенного (например, HKU).
параметр | Имя параметра. Чтобы удалить значение «по умолчанию», используйте пустое значение или опустите его.

Переключатели

/K При пустом параметре или его отсутствии удаляет ключ целиком.
Будьте внимательны при использовании этого переключателя!

Примечания

В случае ошибки удаления переменная %ERROR% будет установлена в 1.


SendCommand

SendCommand <команда>

Посылает Total Commander его внутреннюю команду.

Параметры

команда Может быть задана литерально (для сопоставления команд используется TOTALCMD.INC) или числом.

Переключатели

Нет.


Set

Set [/C] | [/EV-] [/EE] <переменная> <текст>

Устанавливает внутреннюю переменную. Если переменная не существует, то она будет создана. Если переменная существует, но является константой, будет выдана ошибка.

Все внутренние переменные — строковые, но могут рассматриваться как числовые в условиях сравнения.

Параметры

переменная | Имя переменной.
текст | Текст, который будет присвоен переменной.

Переключатели

/EV- | Отключает использование переменных и переменных окружения в тексте.
/EE | Включает применение эскейп-последовательностей (\n, \r, \t) в тексте.
/C | Указывает на то, что текст должен трактоваться как выражение, результатом которого должно быть число. Поддерживаются арифметические операции и скобки. Переменные (в том числе окружения) всегда разворачиваются.

Связанные

SetEnv


SetEnv

SetEnv [/A|/AD] [/EV-] [/EE] <переменная> <текст>

Устанавливает значение новой или существующей переменной окружения. Все изменения будут доступны только текущего и дочерних процессов.

Параметры

переменная | Имя переменной.
текст | Текст, который будет присвоен переменной.

Переключатели

/EV- | Отключает использование переменных и переменных окружения в тексте.
/EE | Включает применение эскейп-последовательностей (\n, \r, \t) в тексте.
/А | Добавляет текст к существующей переменной (при отсутствии параметра — перезаписывает).
/АD | То же, что и /A, но разрешает дублирование (см. примечание).

Связанные

Set

Примечания

При использовании опции /A плагин проверяет наличие добавляемого текста в конце текста переменной и не добавляет его повторно. Это позволяет избежать ситуации с постоянным добавлением строки при перезапуске TC или его выгрузки командой cm_UnloadPlugins. Если все же нужно добавлять текст без этой проверки, используйте опцию /AD.

Пример использования (было актуально для версий TC < 8.0): можно положить noclose.pif в каталог Total Commander и добавить этот путь в PATH процесса, в этом случае команда Shift+Enter будет работать корректно без необходимости копирования этого файла в каталог windows.


ShellExec

ShellExec [/EV-] [/SW_HIDE|/SW_SHOWNORMAL|/SW_MINIMIZE|/SW_MAXIMIZE] [/T] [/W[:####]] [/WAIT[:####]] <файл> [<параметры> [<каталог>]]

Запустить внешний файл. Файл может быть как исполняемым, так и произвольным, в этом случае он будет открыт в ассоциированном приложении.

Если параметры не заданы, но нужно задать рабочую папку, в качестве параметра поставьте пустую строку (две кавычки подряд).

Параметры

файл | Имя файла. Может содержать переменные или переменные окружения.
параметры | Строка параметров. Может содержать переменные или переменные окружения.
каталог | Имя рабочего каталога. Может содержать переменные или переменные окружения.

Переключатели

/EV- | Отключает использование переменных и переменных окружения в тексте.
/SW_HIDE | Запуск приложения в скрытом режиме.
/SW_SHOWNORMAL | Запуск приложения в обычном режиме. Используется при отсутствии явно заданного SW_* параметра.
/SW_MINIMIZE | Запуск приложения в свернутом режиме.
/SW_MAXIMIZE | Запуск приложения в развернутом на весь экран режиме.
/T | Закрывает запущенный процесс при выгрузке плагина (также см. директиву AutorunBlockUnload).
/TT | Закрывает дерево запущенного процесса при выгрузке плагина.
/W[:####] | Перед закрытием процессов пытается сначала закрыть окно процесса. Стандартный таймаут ожидания завершения — 1000 мс. После переключателя опционально может присутствовать число, задающее таймаут, например: /W:5000. Этот переключатель может быть использован только совместно с переключателями /T или /TT.
/WAIT[:####] | Ожидать завершения процесса. По умолчанию ожидает бесконечно. После переключателя опционально может присутствовать число, задающее таймаут, например: /WAIT:5000. Переключатели /T или /TT игнорируются при использовании этого переключателя.


Sleep

Sleep <задержка>

Задержка перед выполнением следующей команды в миллисекундах.


StrLeft

StrLeft <переменная> <текст> <количество>

Берет из входного текста заданное количество символов с левой стороны строки и записывает результат в переменную.


StrLen

StrLen  <переменная> <текст>

Записывает в переменную длину текста.


StrLower

StrLower <переменная> <текст>

Переводит текст в нижний регистр и записывает результат в переменную.


StrMid

StrMid <переменная> <текст> <положение> [<количество>]

Берет из входного текста заданное количество символов, начиная со стартовой позиции, и записывает результат в переменную. Если количество опущено, копируются символы до конца строки.


StrPart

StrPart [/S] <var> <text> <delim> <index>

Разделяет строку <text> по разделителю <delim> и возвращает часть с индексом <index>, начиная с 1. Если <index> больше числа разделенных частей, команда возвращает пустую строку устанавливает %ERROR% в 1. Если не было найдено ни одного разделителя, команда возвращает строку целиком и устанавливает %ERROR% в 1.

Переключатели

/S Регистрозависимый поиск.


StrPos

StrPos [/S] <переменная> <текст> <подстрока>

Записывает в переменную позицию подстроки в тексте.

Переключатели

/S Регистрозависимый поиск.


StrReplace

StrReplace [/S] <переменная> <текст> <старая подстрока> [<новая подстрока>]

Заменяет в тексте старые подстроки на новые.

Переключатели

/S Регистрозависимый поиск.


StrRight

StrRight <переменная> <текст> <количество>

Берет из входного текста заданное количество символов с правой стороны строки и записывает результат в переменную.


StrTrim

StrTrim <переменная> <текст>

Удаляет из входного текста пробельные символы с начала и конца строки и записывает результат в переменную.


StrUpper

StrUpper <переменная> <текст>

Переводит текст в верхний регистр и записывает результат в переменную.


Стандартные плагины

При необходимости использования своих команд с параметрами можно воспользоваться возможностью подключения плагинов. Плагины загружаются командой LoadLibrary.

В дистрибутив уже включены три плагина.

ModifyDialogs

Предназначен для небольших косметических изменений вида диалогов Total Commander. Бывший MoveButton.

SysInfo

Плагин предназначен для получения различной информации из системы.

Process

В плагин включены дополнительные функции для работы с процессами.


О плагине

Плагин ModifyDialogs предназначен для небольших косметических изменений вида диалогов Total Commander.

В первых версиях плагин (под названием MoveButton) работал только с окном копирования/перемещения. В настоящее время можно отслеживать и обрабатывать до 32 диалогов, каждый из которых может содержать до 16 различных классов элементов управления и до 32 элементов управления для каждого класса.

Для диалогов можно производить следующие действия: перемещение и изменение размеров самого диалога, перемещение и изменение размеров элементов управления диалога, центрирование диалогов относительно главного или родительского окна, сохранение и загрузку позиций и размеров окна.

Обратите внимание, что плагин может работать не во всех диалогах (например, не работает в диалоге поиска файлов).

Базовые понятия

Плагин может работать в двух режимах — простом и расширенном. В простом режиме выполняется корректировка только двух диалогов — копирования и перемещения. Для использования простого режима достаточно вызвать одну команду ModifyDialogs, опционально — с параметром.

При работе в расширенном режиме можно задать произвольный диалог из имеющихся в составе Total Commander. Для задания обработки диалога необходимо сначала вызвать команду AddDialog, а затем одну или несколько команд AddControl для добавления элементов управления. Для добавления следующего диалога нужно вызвать AddDialog с параметрами следующего диалога и добавить для него элементы управления.

Если нужно только производить действия над диалогом (сохранение положения или центрирование), то элементы управления можно не добавлять.

После окончания добавления диалогов нужно вызвать команду ModifyDialogs без параметров.

Поскольку в 32-битной и 64-битной версиях Total Commander используются разные классы элементов управления, для поддержки обеих версий необходимо в конфигурации Autorun сделать два набора и загружать нужный в зависимости от версии программы.

Для определения классов, экземпляров элементов управления и видимого текста для фильтра удобно использовать программу Au3Info из дистрибутива Autoit3. Для просмотра структуры диалога и базовых тестов над его элементами управления можно использовать InqSoft Window Scanner. Разумеется, это только для примера, вы можете использовать свои любимые инструменты.

Некоторые примеры использования плагина в расширенном режиме можно посмотреть на странице примеров.

Фильтрация по условию

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

При использовании нескольких диалогов с одним классом, к которым применены условия, нужно помнить, что если для какого-то диалога не удалось найти условие, его нужно ставить после диалогов, для которых есть условия. Тогда если ни одно из условий в предыдущих диалогах не сработает, будет использоваться диалог без условия.

Условия для разных диалогов следует подбирать таким образом, чтобы они в максимальной степени отличали диалог от других. Неоднозначность возникает тогда, когда условие, явно заданное для одного диалога, может явно или неявно выполняться для другого, который стоит выше.

Пример неоднозначности в использовании условий:

# Диалог "Фильтр...":
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Total Commander"

# Диалог создания каталога:
AddDialog "TCOMBOINPUT"
AddCondition /EXISTS:0 "TButton" 3

В этом коде второй диалог будет всегда определяться как диалог фильтра, поскольку тоже имеет заголовок «Total Commander». Чтобы исключить неоднозначность, нужно добавить условие существования кнопки в первый диалог либо поменять диалоги местами.

# Диалог "Фильтр...":
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Total Commander"
AddCondition /EXISTS:1 "TButton" 3

# Диалог создания каталога:
AddDialog "TCOMBOINPUT"
AddCondition /EXISTS:0 "TButton" 3

Теперь диалог фильтра будет найден только в случае, если в дополнение к заголовку «Total Commander» существует кнопка TButton3. Соответственно, второй диалог будет тоже найден, поскольку в нем кнопка TButton3 не существует. Условие поиска по заголовку в данном случае не играет роли, но может понадобиться в случае добавления третьего диалога с классом TCOMBOINPUT.

# Диалог создания каталога:
AddDialog "TCOMBOINPUT"
AddCondition /EXISTS:0 "TButton" 3

# Диалог "Фильтр...":
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Total Commander"

В этом варианте диалог создания каталога будет найден, поскольку в нем не существует кнопка TButton3, а в диалоге фильтра существует.


Примеры

На этой станице собраны различные примеры по использованию плагина. Примеры актуальны для Total Commander 9.21a.

Диалог копирования/перемещения

Пример задания перемещения с переключением для 32-битной и 64-битной системы, как в схеме по умолчанию:

If %AUTORUN_TCARCH% = 32 Then

AddDialog DIALOG_COPYMOVE
AddCondition /VISIBLE:1 "TButton" 2
AddControl /X:113 "TButton" 2
AddControl /X:20 /Y:-74 /W:-20 "TButton" 3
AddControl /W:-3 "TMyComboBox" 1
AddControl /X:-3 /Y:1 "TButton" 1
AddControl /X:113 "TButton" 4
AddControl /X:113 "TButton" 5
AddControl /X:113 "TButton" 6

AddDialog DIALOG_COPYMOVE_PINNED
AddControl /W:-3 "TMyComboBox" 2
AddControl /X:-3 /Y:1 "TButton" 1
AddControl /X:113 "TButton" 2
AddControl /X:113 "TButton" 4
AddControl /X:113 "TButton" 5
AddControl /X:113 "TButton" 6

Else

AddDialog DIALOG_COPYMOVE
AddCondition /VISIBLE:1 "Button" 3
AddControl /X:20 /Y:-74 /W:-20 "Button" 4
AddControl /X:113 "Button" 3
AddControl /X:113 "Button" 6
AddControl /X:113 "Button" 7
AddControl /X:113 "Button" 8
AddControl /Y:1 "Button" 2

AddDialog DIALOG_COPYMOVE_PINNED
AddControl /X:113 "Button" 7
AddControl /X:113 "Button" 10
AddControl /X:113 "Button" 11
AddControl /X:113 "Button" 12
AddControl /Y:1 "Button" 2

Endif

ModifyDialogs

Пример задания перемещения, как в схеме c опцией /NARROW (для 32-битной версии):

AddDialog /X:58 /W:-116 DIALOG_COPYMOVE
AddCondition /VISIBLE:1 "TButton" 2
AddControl /X:-93 /Y:-74 /W:-20 "TButton" 3
AddControl /X:-116 /Y:1 "TButton" 1
AddControl /W:-116 "TMyComboBox" 1
AddControl /W:-114 "TMyComboBox" 2
AddControl /X:-111 "TMyCheckBox" 1
AddControl /W:-101 "TMyCheckBox" 3
AddControl /W:-114 "TMyGroupBox" 1

AddDialog DIALOG_COPYMOVE_POST
AddControl /W:-114 "TMyComboBox" 1
AddControl /W:-114 "TCheckBox" 1
AddControl /W:-114 "TCheckBox" 2
AddControl /W:-114 "TCheckBox" 3

AddDialog /X:58 /W:-116 DIALOG_COPYMOVE_PINNED
AddControl /W:-113 "TMyGroupBox" 1
AddControl /W:-113 "TMyComboBox" 1
AddControl /W:-116 "TMyComboBox" 2
AddControl /W:-113 "TMyComboBox" 3
AddControl /X:-116 /Y:1 "TButton" 1
AddControl /X:-110 "TMyCheckBox" 1
AddControl /W:-113 "TCheckBox" 1
AddControl /W:-113 "TCheckBox" 2
AddControl /W:-113 "TCheckBox" 3

ModifyDialogs

С кнопками, равномерно распределенными по ширине диалога (для 32-битной версии) (автор BeTeP):

AddDialog DIALOG_COPYMOVE
AddCondition /VISIBLE:1 "TButton" 2
AddControl /X:20 /W:20 "TButton" 2
AddControl /Y:-74 "TButton" 3
AddControl /X:76 /W:40 "TButton" 4
AddControl /X:39 /W:38 "TButton" 5
AddControl /W:21 "TButton" 6
ModifyDialogs

С исправленной шириной кнопок (для 32-битной версии) (автор Flasher):

AddDialog /CENTER:3 /W:-70 "DIALOG_COPYMOVE"
AddCondition /VISIBLE:1 "TButton" 2
AddControl /W:-64 "TMyComboBox" 2
AddControl /W:-72 "TMyComboBox" 1
AddControl /X:-67 "TMyCheckBox" 1
AddControl /X:-69 "TButton" 1
AddControl /W:-21 "TButton" 6
AddControl /W:-20 /X:-22 "TButton" 2
AddControl /W:-3 /X:-42 "TButton" 5
AddControl /X:47 "TButton" 4
AddControl /W:-20 /X:-137 "TButton" 3
AddControl /W:-66 "TMyGroupBox" 1
AddDialog /CENTER:3 "DIALOG_COPYMOVE_POST"
AddControl /W:-67 "TMyComboBox" 1
AddControl /W:-67 "TCheckBox" 1
AddControl /W:-67 "TCheckBox" 2
AddControl /W:-67 "TCheckBox" 3
AddDialog /CENTER:3 /W:-70 "DIALOG_COPYMOVE_PINNED"
AddCondition /VISIBLE:1 "TButton" 2
AddControl /W:-64 "TMyComboBox" 3
AddControl /W:-72 "TMyComboBox" 2
AddControl /W:-68 "TMyComboBox" 1
AddControl /X:-67 "TMyCheckBox" 1
AddControl /X:-69 "TButton" 1
AddControl /W:-21 "TButton" 6
AddControl /W:-20 /X:-22 "TButton" 2
AddControl /W:-3 /X:-42 "TButton" 5
AddControl /X:47 "TButton" 4
AddControl /W:-20 /X:-137 "TButton" 3
AddControl /W:-66 "TMyGroupBox" 1
AddControl /W:-67 "TCheckBox" 1
AddControl /W:-67 "TCheckBox" 2
AddControl /W:-67 "TCheckBox" 3

Прочие диалоги

Пример исправления диалога по Shift+F4, чтобы поменять местами кнопки Дерево и ОК. Для 32-х и 64-х битной версии.

If %AUTORUN_TCARCH% = 32 Then
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "TButton" 1 "Д&ерево"
AddControl /X:132 /W:-20 "TButton" 1
AddControl /X:-124 "TButton" 3
Else
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "Button" 1 "Д&ерево"
AddControl /X:134 /W:-20 "Button" 1
AddControl /X:-124 "Button" 3
Endif

ModifyDialogs

Подборка разных диалогов. Демонстрирует:

  • использование условий для диалогов с одним классом;
  • чтение текста, используемого для фильтрации из языковых файлов;
  • возможные настройки сохранения.

Код для 32-битной версии. (автор Flasher):

IniRead /R LNG %COMMANDER_INI% Configuration LanguageIni Default
If %LNG% = Default Then
  Set ExpandSelection "Expand selection"
  Set CustomFields "Custom fields by file type"
  Set ListerPlugins "Lister plugins"
  Set ContentPlugins "Content plugins"
  Set IntAssoc "Internal Associations"
  Set Tree &Tree
  Set Edit Edit/View
  Set Plugins Plugins
  Set Font Font
  Set DefineColors "Define colors by file type"
  Set FSplugins "File system plugins"
Else
  LngRead ExpandSelection 18 '%COMMANDER_PATH%\Language\%LNG%'
  LngRead CustomFields 1589
  LngRead ListerPlugins 1593
  LngRead ContentPlugins 1595
  LngRead IntAssoc 1722
  LngRead Tree 5002
  LngRead Edit 5102
  StrPart Edit "%Edit%" \n 5
  LngRead Plugins 5360
  LngRead Font 5844
  StrTrim Font %Font%
  LngRead DefineColors 6501
  LngRead FSplugins 6841
EndIf

# Сохранение размеров "Дополнительные данные по типам файлов":
AddDialog /CENTER:7 /SAVE:12 TDlgCustomColors
AddCondition /TEXT "" 0 %CustomFields%
# Сохранение размеров "Определить цвета для типов файлов":
AddDialog /CENTER:7 /SAVE:12 TDlgCustomColors
AddCondition /TEXT "" 0 %DefineColors%
# Сохранение размеров "Внутренние ассоциации":
AddDialog /CENTER:3 /SAVE:12 TDlgCustomColors
AddCondition /TEXT "" 0 %IntAssoc%
# Центрирование "Шрифт" относительно "Настройка" с модификацией элементов:
AddDialog /CENTER:7 "#32770"
AddCondition /Text "" 0 %Font%
AddCondition /VISIBLE:0 Static 4
AddControl /H:342 ComboBox 1
AddControl /H:50 ComboBox 2
AddControl /H:164 ComboBox 3
AddControl /Y:26 /H:-40 /W:-84 Button 4
AddControl /W:0 /X:600 /Y:30 Static 6
AddControl /Y:30 Static 7
AddControl /Y:30 ComboBox 5
AddControl /X:194 /Y:-20 SysLink 1
# Увеличение и сохранение высоты "Добавить выделение":
AddDialog /CENTER:2 /H:600 TCOMBOINPUT
AddCondition /TEXT "" 0 %ExpandSelection%
AddControl /H:600 TMyListBox 1
AddControl /Y:600 TButton 1
AddControl /Y:600 TButton 2
AddControl /Y:600 TButton 3
# Поменять местами кнопки Дерево и ОК диалоге создания файла (Shift+F4):
AddDialog TCOMBOINPUT
AddCondition /TEXT TButton 1 %Tree%
AddControl /X:132 /W:-20 TButton 1
AddControl /X:-124 TButton 3
# Не изменять диалог создания каталога:
AddDialog TCOMBOINPUT
AddCondition /EXISTS:0 TButton 3
# Измение высоты диалога "Фильтр...":
AddDialog /CENTER:2 /H:600 TCOMBOINPUT
AddCondition /TEXT "" 0 "Total Commander"
AddControl /H:600 TMyListBox 1
AddControl /Y:600 TButton 1
AddControl /Y:600 TButton 2
AddControl /Y:600 TButton 3
# Сохранение размеров "Выбор команды":
AddDialog /WAIT:40 /SAVE:15 TCmdSelForm
# Сохранение размеров "Файловые ассоциации":
AddDialog /CENTER:7 /SAVE:12 TASSOCIATEDLG
AddCondition /TEXT /PARENT TMyPanel 1 %Plugins%
AddDialog /CENTER:7 /SAVE:12 TASSOCIATEDLG
AddCondition /TEXT /PARENT TMyPanel 1 %Edit%
AddDialog /CENTER:3 /SAVE:12 TASSOCIATEDLG
# Сохранение размеров "Плагины файловой системы"
AddDialog /CENTER:7 /SAVE:12 TFsPluginConfigForm
AddCondition /TEXT "" 0 %FSplugins%
# Сохранение размеров "Плагины внутреннего просмотрщика"
AddDialog /CENTER:7 /SAVE:12 TFsPluginConfigForm
AddCondition /TEXT "" 0 %ListerPlugins%
# Сохранение размеров "Информационные плагины"
AddDialog /CENTER:7 /SAVE:12 TFsPluginConfigForm
AddCondition /TEXT "" 0 %ContentPlugins%

ModifyDialogs


AddDialog

Команда добавляет диалог в список отслеживаемых диалогов.

AddDialog [/NOSCALE] [/X:<value>] [/Y:<value>] [/W:<value>] [/H:<value>] [/SAVE:<value>] [/CENTER:<value>] [/WAIT:<value>] <name/class> [<text>]

Параметры поиска диалога

<name/class> Название диалога или имя класса диалога. Если это имя не одно из предопределенных имен (смотрите ниже), то трактуется как имя класса диалога.

Параметры изменения диалога

Параметры /X, /Y, /W, /H задают смещение относительно исходных координат окна или изменение его размеров. Если параметр опущен, то считается, что его значение = 0 (т.е. окно не перемещается по этой координате или не изменяет соответствующий размер).

Значения параметров задаются для стандартной плотности 96 dpi. При более высоких значениях плотности диалог будет масштабироваться автоматически. Это поведение можно изменить параметром /NOSCALE.

/X:<value> | Смещение диалога по X относительно исходного положения диалога. Положительное значение смещает диалог вправо, отрицательное — влево.
/Y:<value> | Смещение диалога по Y относительно исходного положения диалога. Положительное значение смещает диалог вниз, отрицательное — вверх.
/W:<value> | Изменение ширины диалога относительно исходной. Положительное значение увеличивает ширину, отрицательное — уменьшает.
/H:<value> | Изменение высоты диалога относительно исходной. Положительное значение увеличивает высоту, отрицательное — уменьшает.
<text> | Новый текст заголовка диалога.
/NOSCALE | Отключает автоматическое масштабирование изменений смещения/размера для данного диалога и всех его элементов управления. Позволяет максимально точно задать нужные значения для нужной плотности пикселей. При использовании этого параметра вам необходимо делать наборы элементов управления под каждую используемую плотность пикселей и выбирать нужный набор в Autorun.
/SAVE:<value> | Включает сохранение и загрузку положения и/или размера для данного диалога. Значение value является суммой флагов: 1 — сохранять x 2 — сохранять y 4 — сохранять ширину 8 — сохранять высоту Положения сохраняются в файле с именем плагина и расширением «pos», по умолчанию это Autorun_ModifyDialogs.pos. Обратите внимание, что работа функции сохранения зависит от класса диалога и заданных для него условий, поэтому при изменении любого из этих параметров сохраненные значения будут сброшены в значения по умолчанию. Также те диалоги, у которых для разных версий различны условия, будут сохраняться независимо для 32-х и 64-х битной версии. :!: Не все окна Total Commander позволяют изменять свои размеры, в некоторых диалогах включено ограничение на изменение размера (например, в диалоге «Поиск файлов» нельзя менять высоту). Сохранение поддерживает тонкую настройку путем редактирования ключей в pos-файле, подробнее смотрите ниже.
/CENTER:<value> | Включает центрирование диалога. Значение value является суммой флагов: 1 — центрировать по х 2 — центрировать по y 4 — центрировать относительно родительского окна По умолчанию окна центрируются относительно главного окна Total Commander. Флаг 4 позволяет центрировать относительно родительского окна. Если родительским окном диалога является главное окно, то добавление флага 4 не имеет смысла. Обратите внимание: центрирование окна происходит после изменения размеров с параметрами /W, /H или их восстановления параметром /SAVE со значением 4, 8 или 12.
/WAIT:<value> | Ожидание перед выполнением операций над диалогом. Значение value задается в миллисекундах. Размеры и позиция некоторых диалогов не могут быть изменены в тот момент, когда работает плагин (либо они изменяются самим Total Commander позже). Для обхода таких ситуаций есть возможность включить задержку. При этом операции над диалогом (изменение положения и размеров, восстановление размеров, центрирование) будут производиться уже после того, как их обработает Total Commander. Обратите внимание, что при использовании этой опции операции над окном будут производиться после того, как оно станет видимым, соответственно, вы будете видеть и его перемещения. Этот эффект можно минимизировать путем правильной настройки задержки. Число задержки должно быть больше 0. Если оно равно 0, ожидание не будет производиться.

Названия диалогов

В связи с тем, что в Total Commander в некоторых случаях используются разные диалоги с одним классом, которые сложно различить, либо требуется их дополнительная обработка (например, элементы управления, появляющиеся после нажатия кнопки «Опции» в диалоге копирования), некоторым диалогам были назначены специальные названия. В настоящее время специальной обработки требует только один диалог, для которого предусмотрены названия:

DIALOG_COPYMOVE | Стандартный диалог копирования/перемещения.
DIALOG_COPYMOVE_POST | Задает элементы управления, появляющиеся после нажатия кнопки «Опции» в диалоге копирования/перемещения.
DIALOG_COPYMOVE_PINNED | Задает элементы управления для раскрытого окна (с нажатой кнопкой прикрепления) в диалоге копирования/перемещения.

Тонкая настройка сохранения

При включении сохранения позиций диалогов будет создан файл с расширением pos. По структуре это обычный ini-файл, и в секции «Common» будут созданы следующие ключи, изменив значения которых, вы можете изменить некоторые аспекты работы функции сохранения:

ScreenResDependent=1 | По умолчанию включено сохранение позиций/размеров, зависимое от разрешения экрана. Установите в 0, чтобы сохранение не зависело от разрешения.
RestoreFromLastRes=1 | При первом открытии диалога на новом разрешении позиции/размеры диалога будут взяты из последнего использованного разрешения. Установите в 0, чтобы позволить Total Commander установить позицию/размер диалога для нового разрешения. Работает только если ScreenResDependent равен 1.
NoRestartToCreate=1 | По умолчанию при смене разрешения секция для нового разрешения создается сразу при следующем открытии диалога. При установке этого ключа в 0 новые секции будут создаваться только при следующем запуске Total Commander. Может быть полезно в средах с частым изменением разрешений, например, виртуальных машинах. Работает только если ScreenResDependent равен 1.


AddCondition

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

AddCondition [/PARENT] <ConditionType> <class> <instance> [<searchtext>]

Параметры задания элемента

<class> | Имя класса элемента управления, который будет участвовать в условии. Если имя пустое, для сравнения берется текст заголовка текущего диалога (или родительского, при использовании параметра /PARENT).
<instance> | Экземпляр элемента управления. Если <class> пустой, используйте 0.
<searchtext> | Опционально. Строка поиска в тексте элемента управления или заголовка диалога. Может быть пустой. В этом случае условие будет истинно, если найденный текст элемента управления или заголовка диалога тоже пустой. В тексте разворачиваются переменные и переменные окружения.
/PARENT | Опционально. По умолчанию поиск элемента управления производится в текущем диалоге. Если задан этот параметр, то поиск будет производиться в родительском диалоге.

Вид условия

В одном условии может быть применен только один из этих видов ConditionType:

/EXISTS:<1/0> | Проверяется, существует ли заданный элемент управления. 1, если должен существовать; 0 — если нет.
/VISIBLE:<1/0> | Проверяется, видим ли заданный элемент управления. 1, если должен быть видим; 0 — если нет.
/TEXT | Производится поиск текста, заданного в условии, в тексте элемента управления или заголовка диалога.

Примечания

В настоящее время можно добавить до 4 условий. Если условий больше одного, то они объединяются согласно логическому «И», т.е. для того, чтобы диалог был найден, необходимо чтобы были выполнены все заданные условия.


AddControl

Команда добавляет элемент управления в текущий диалог. Перед вызовом этой команды необходимо добавить диалог командой AddDialog.

AddControl [/X:<value>] [/Y:<value>] [/W:<value>] [/H:<value>] <class> <instance> [<text>]

Параметры элемента управления

<class> | Класс элемента управления (TButton и т.д.).
<instance> | Номер экземпляра для заданного класса, от 1 и выше. Может меняться между версиями Total Commander.

Параметры изменения

Параметры /X, /Y, /W, /H задают смещение относительно исходных координат окна или изменение его размеров. Если параметр опущен, то считается что его значение = 0 (т.е. окно не перемещается по этой координате или не изменяет соответствующий размер).

Значения задаются при стандартной плотности 96 dpi. При более высоких значениях плотности элемент управления будет масштабироваться автоматически либо соответственно параметру /NOSCALE в команде AddDialog.

/X:<value> | Смещение элемента управления по X относительно исходного положения. Положительное значение смещает диалог вправо, отрицательное — влево.
/Y:<value> | Смещение элемента управления по Y относительно исходного положения. Положительное значение смещает диалог вниз, отрицательное — вверх.
/W:<value> | Изменение ширины элемента управления относительно исходной. Положительное значение увеличивает ширину, отрицательное — уменьшает.
/H:<value> | Изменение высоты элемента управления относительно исходной. Положительное значение увеличивает высоту, отрицательное — уменьшает.
<text> | Новый текст элемента управления.


ModifyDialogs

ModifyDialogs [/VER:<версия>]

Команда запускает операции перемещения/изменения размеров, сохранения и центрирования диалогов и элементов управления диалогов.

Работает в двух режимах — простом и расширенном.

Простой режим

Простой режим, или режим по умолчанию, работает в том случае, если до запуска этой команды не было добавлено ни одного диалога командой AddDialog.

В простом режиме обрабатывается только диалог копирования и перемещения, сохранение и центрирование при этом недоступно.

Параметры простого режима

/VER:<версия> Параметр используется для возможности корректной работы плагина в старых версиях TC. Список возможных значений указан в таблице ниже. Если указано неправильное значение или параметр опущен будет включена обработка последней поддерживаемой версии.

Возможные значения <версия>:

950 | Поддержка для версии TC от 9.50 до 9.51
920 | Поддержка для версии TC от 9.20 до 9.21а
920N | Поддержка для версии TC от 9.20 до 9.21а При запуске с этим параметром окно будет сужено, как в версиях TC < 8.50. :!: Внимание! С этим параметром теряется возможность «закрепить» раскрытое окно копирования. Также некоторые элементы управления окна под 64-битной версией не могут быть сужены. Использование не рекомендуется.

Расширенный режим

Если до запуска этой команды был добавлен хотя бы один диалог с помощью команды AddDialog, плагин начинает работать в расширенном режиме, при котором все перемещения элементов управления задаются пользователем.

Параметры простого режима при этом игнорируются.


Переменные

Плагин экспортирует константы:

%SYSINFO_OSARCH% | Архитектура ОС, где работает Total Commander. Может быть 32 или 64.
%SYSINFO_OSVERSION% Версия ОС, где работает Total Commander. Может принимать значения:
WIN_2000
WIN_XP
WIN_2003
WIN_2003R2
WIN_VISTA
WIN_2008
WIN_7
WIN_2008R2
WIN_8
WIN_2012
WIN_81
WIN_2012R2
WIN_10
WIN_10SRV *

Если версию распознать не удалось, выдается следующая строка:

"WIN_" + Major Version + "." + Minor Version

Для рабочей станции к строке в конец добавляется буква «W».

Например, для Windows 7 строка будет: WIN_6.2W, для Windows Server 2008 — WIN_6.1.

%SYSINFO_OSSERVICEPACK% | Версия сервис-пака (например, Service Pack 3).
%SYSINFO_DESKTOPWIDTH% | Ширина экрана.
%SYSINFO_DESKTOPHEIGHT% | Высота экрана.
%SYSINFO_DESKTOPDEPTH% | Глубина цвета экрана.
%SYSINFO_USERLANG% | Трехсимвольный код языка пользователя.

Примечания

Значение WIN_10SRV — временное, пока нет информации о том, какое окончательное название будет иметь Windoiws 10 Server Technical Preview.


GetCpuInfo

GetCPUInfo [/S] <переменная> <идентификатор> [<индекс>]

Параметры

переменная | Имя переменной, в которое будет записано значение.
идентификатор | Текстовый идентификатор получаемого значения. Возможные идентификаторы перечислены в таблице ниже. Регистр значения не имеет.
индекс | Числовой индекс для идентификатора ProcessorFeatures. Для других идентификаторов значение индекса будет проигнорировано. Возможные значения индексов перечислены в таблице ниже.

Переключатели

/S Использовать строковое представление True/False в значениях вместо 0/1.

Поддерживаемые идентификаторы

Идентификатор | Значение | Описание
CPUString | Строка | Идентификатор процессора (GenuineIntel, AuthenticAMD)
CPUBrandString | Строка | Характеристики процессора
Model | Число | Модель
Family | Число | Семейство
SteppingID | Число | ID степпинга
ProcessorType | Число | Тип процессора
ExtendedModel | Число | Расширенное значение модели
ExtendedFamily | Число | Расширенное значение семейства
BrandIndex | Число | Индекс бренда
CLFLUSHcachelinesize | Число | Размер строки кэша CLFLUSH / 8
APICPhysicalID | Число | Физический ID APIC
SSE3NewInstructions | 0/1 | Наличие поддержки инструкций SSE3
MONITOR_MWAIT | 0/1 | Наличие MONITOR/MWAIT
CPLQualifiedDebugStore | 0/1 | Наличие CPL Qualified Debug Store
ThermalMonitor2 | 0/1 | Наличие второго датчика температуры
CacheLineSize | Число | Размер строки кэша
L2Associativity | Число | L2 Associativity
CacheSizeK | Число | Размер кэша в Кб
ProcessorFeatures | 0/1 | Возможности процессора. Для получения значения используйте индекс (таблица ниже).

Значение <индекс> для идентификатора ProcessorFeatures:

Bit | Mnemonic | Description
0 | FPU | x87 FPU on Chip
1 | VME | Virtual-8086 Mode Enhancement
2 | DE | Debugging Extensions
3 | PSE | Page Size Extensions
4 | TSC | Time Stamp Counter
5 | MSR | RDMSR and WRMSR Support
6 | PAE | Physical Address Extensions
7 | MCE | Machine Check Exception
8 | CX8 | CMPXCHG8B Inst.
9 | APIC | APIC on Chip
10 | n/a | Reserved
11 | SEP | SYSENTER and SYSEXIT
12 | MTRR | Memory Type Range Registers
13 | PGE | PTE Global Bit
14 | MCA | Machine Check Architecture
15 | CMOV | Conditional Move/Compare Instruction
16 | PAT | Page Attribute Table
17 | PSE | Page Size Extension
18 | PSN | Processor Serial Number
19 | CLFSH | CFLUSH Instruction
20 | n/a | Reserved
21 | DS | Debug Store
22 | ACPI | Thermal Monitor and Clock Ctrl
23 | MMX | MMX Technology
24 | FXSR | FXSAVE/FXRSTOR
25 | SSE | SSE Extensions
26 | SSE2 | SSE2 Extensions
27 | SS | Self Snoop
28 | HTT | Hyper-threading technology
29 | TM | Thermal Monitor
30 | n/a | Reserved
31 | PBE | Pend. Brk. En.

Примечания

В случае успеха значение переменной %ERROR% будет установлено в 0. В случае ошибки (несуществующий идентификатор или отсутствие блоков дополнительной информации) значение переменной %ERROR% будет установлено в 1.


GetSysColor

GetSysColor <переменная> <индекс цвета>

Параметры

переменная | Имя переменной, в которое будет записано значение.
индекс цвета | Числовой индекс системного цвета. Их значения можно взять, например, здесь. В случае передачи неподдерживаемого значения будет выдано сообщение об ошибке.


GetSystemMetrics

GetSystemMetrics <переменная> <индекс метрики>

Возвращает значение системной метрики по заданному индексу.

Параметры

переменная | Имя переменной, в которое будет записано значение.
индекс метрики | Числовой индекс необходимой метрики. Их значения можно взять, например, здесь.


SystemParametersInfo

SystemParametersInfo <переменная> <индекс параметра>

Параметры

переменная | Имя переменной, в которое будет записано значение.
индекс параметра | Числовой индекс необходимого параметра. Их значения можно взять, например, здесь (см. комментарии к статье). Не все значения поддерживаются, в случае передачи неподдерживаемого значения будет выдано сообщение об ошибке. Поддерживаемые значения смотрите в таблице ниже.

Поддерживаемые параметры

Параметр | Значение
SPI_GETBORDER | 5
SPI_ICONHORIZONTALSPACING | 13
SPI_GETSCREENSAVETIMEOUT | 14
SPI_GETKEYBOARDDELAY | 22
SPI_ICONVERTICALSPACING | 24
SPI_GETMOUSESPEED | 112
SPI_GETMOUSEHOVERWIDTH | 98
SPI_GETMOUSEHOVERHEIGHT | 100
SPI_GETMOUSEHOVERTIME | 102
SPI_GETWHEELSCROLLLINES | 104
SPI_GETWHEELSCROLLCHARS | 108
SPI_GETFONTSMOOTHINGTYPE | 8202
SPI_GETFONTSMOOTHINGCONTRAST | 8204
SPI_GETFOCUSBORDERWIDTH | 8206
SPI_GETFOCUSBORDERHEIGHT | 8208
SPI_GETFONTSMOOTHINGORIENTATION | 8210
SPI_GETMESSAGEDURATION | 8214
SPI_GETKEYBOARDSPEED | 10
SPI_GETMENUSHOWDELAY | 106
SPI_GETFOREGROUNDLOCKTIMEOUT | 8192
SPI_GETACTIVEWNDTRKTIMEOUT | 8194
SPI_GETFOREGROUNDFLASHCOUNT | 8196
SPI_GETMOUSECLICKLOCKTIME | 8200
SPI_GETCARETWIDTH | 8198
SPI_GETMOUSETRAILS | 94
SPI_GETSCREENSAVEACTIVE | 16
SPI_GETICONTITLEWRAP | 25
SPI_GETMENUDROPALIGNMENT | 27
SPI_GETDRAGFULLWINDOWS | 38
SPI_GETKEYBOARDPREF | 68
SPI_GETSCREENREADER | 70
SPI_GETFONTSMOOTHING | 74
SPI_GETSHOWSOUNDS | 56
SPI_GETSNAPTODEFBUTTON | 95
SPI_GETSHOWIMEUI | 110
SPI_GETACTIVEWINDOWTRACKING | 4096
SPI_GETMENUANIMATION | 4098
SPI_GETCOMBOBOXANIMATION | 4100
SPI_GETLISTBOXSMOOTHSCROLLING | 4102
SPI_GETGRADIENTCAPTIONS | 4104
SPI_GETKEYBOARDCUES | 4106
SPI_GETACTIVEWNDTRKZORDER | 4108
SPI_GETHOTTRACKING | 4110
SPI_GETMENUFADE | 4114
SPI_GETSELECTIONFADE | 4116
SPI_GETTOOLTIPANIMATION | 4118
SPI_GETTOOLTIPFADE | 4120
SPI_GETCURSORSHADOW | 4122
SPI_GETMOUSESONAR | 4124
SPI_GETMOUSECLICKLOCK | 4126
SPI_GETMOUSEVANISH | 4128
SPI_GETFLATMENU | 4130
SPI_GETDROPSHADOW | 4132
SPI_GETBLOCKSENDINPUTRESETS | 4134
SPI_GETUIEFFECTS | 4158
SPI_GETDISABLEOVERLAPPEDCONTENT | 4160
SPI_GETCLIENTAREAANIMATION | 4162
SPI_GETCLEARTYPE | 4168
SPI_GETSCREENSAVESECURE | 118
SPI_GETBEEP | 1
SPI_GETDESKWALLPAPER | 115


GetWMIValue

GetWMIValue <переменная> <имя параметра> <запрос>

Параметры

переменная | Имя переменной, в которое будет записано значение.
имя параметра | Имя, идентифицирующее параметр в классе. Их значения можно взять на MSDN.
запрос | Запрос для получения параметра.

Пример

Получает имя процессора:

GetWMIValue VAR Name "SELECT * FROM Win32_Processor"


Переменные

Плагин экспортирует следующие переменные:

%PROCESS_USERISADMIN% | Принимает значение 0 или 1 в зависимости от того, находится ли пользователь в группе администраторов.
%PROCESS_RUNASADMIN% | Принимает значение 0 или 1 в зависимости от того, имеет ли фактически пользователь права администратора.
%PROCESS_ISELEVATED% | Принимает значение 0 или 1 в зависимости от того, запущен ли процесс с повышением привилегий.
%PROCESS_INTEGRITYLEVEL% | Уровень целостности процесса. Может принимать значения: 0 — Недоверенный 1 — Низкий 2 — Средний 3 — Высокий 4 — Системный


ProcessCount

ProcessCount [/F] [/EV-] <переменная> <процесс>

Возвращает число запущенных процессов с данным именем.

Параметры

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

Переключатели

/EV- | Отключает использование переменных окружения в тексте.
/F | Поиск выполняется по полному имени процесса. Поиск регистронезависимый.

Связанные

ProcessExist


ProcessExecGetOutput

ProcessExecGetOutput [/EV-] [/OEM] <переменная> <файл> [<параметры> [<каталог>]]

Запускает процесс (скрыто) и получает результат его выполнения через stdout в переменную. Файл должен быть только исполняемый.

Параметры

переменная | Имя переменной, в которое будет записано значение.
файл | Имя файла. Может содержать переменные или переменные окружения.
параметры | Командная строка файла. Может содержать переменные или переменные окружения.
каталог | Имя рабочего каталога. Может содержать переменные или переменные окружения.

Переключатели

/EV- | Отключает использование переменных окружения в тексте.
/OEM | Вывод программы в OEM-кодировке (по умолчанию ANSI).


ProcessExist

ProcessExist [/F] [/EV-] <переменная> <процесс>
ProcessExist [/F] [/EV-] <процесс>

Функция определяет наличие запущенного процесса.

Функция доступна для непосредственного вызова и вызова из условия. При непосредственном вызове первый параметр должен быть именем переменной, в которую будет записан 0 или 1 в зависимости от результата выполнения.

Параметры

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

Переключатели

/EV- | Отключает использование переменных окружения в тексте.
/F | Поиск выполняется по полному имени процесса. Поиск регистронезависимый.

Связанные

ProcessCount


ProcessTerminate

ProcessTerminate [/F] [/EV-] [/TT] [/A] [/W[:####]] <процесс 1> [<процесc 2> [... <процесс N>]]

Закрывает один или несколько процессов. Обратите внимание, что опции применяются ко всем перечисленным в функции процессам.

Параметры

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

Переключатели

/EV- | Отключает использование переменных окружения в тексте.
/F | Использовать сравнение по полному пути к файлу.
/TT | Закрывает дерево процесса, т.е. сам процесс и все процессы, запущенные им.
/W[:xxxx] | Перед закрытием процессов пытается сначала закрыть окно процесса. Стандартный таймаут ожидания завершения — 1000 мс. После параметра опционально может присутствовать число, задающее таймаут, например: /W:5000.
/A | Закрывает все процессы c заданным именем (иначе только первый).


Для разработчиков

При загрузке библиотеки команда LoadLibrary пытается найти в dll функцию Autorun_PluginInit, и если такая будет найдена, предоставляет возможность разработчику задать команды и переменные. В функцию передается структура AutorunInterface, содержащая различные полезные данные, которые можно в дальнейшем использовать в плагине, а также указатель на единую функцию-адаптер. Для работы с функциями необходимо присвоить этот указатель глобальной переменной Adapter, определенной в заголовочном файле. После этого становятся доступными функции:

function AddFunc(AName: PWideChar; AAddr: Pointer; AFlags: integer): integer;

Добавляет пользовательскую команду в Autorun.

function ParseNext(AParamStr: PWideChar; ABuffer: PWideChar; ABufSize: DWORD): integer;

Возвращает следующий параметр из переданной строки с помощью парсера Autorun. Избавляет разработчика от самостоятельного выполнения этой работы.

function GetVar(AVarName: PWideChar; Buffer: PWideChar; nBufferSize: DWORD): integer;

Получает значение переменной по передаваемому имени.

function SetVar(const AName, AValue: PWideChar; AFlags: integer): integer;

Добавляет пользовательскую переменную в Autorun.

function SetVarMacro(const AName: PWideChar; AFuncAddr: Pointer): integer;

Добавляет пользовательскую макро-переменную в Autorun.

function ExpandVars(const AText: PWideChar; ABuffer: PWideChar; ABufSize: DWORD): integer;

Разворачивает переменные в переданной строке.

function ReportError(MsgID: integer; const AParam: PWideChar): integer; overload;

Выводит стандартное сообщение об ошибке (ID — в языковом файле Autorun). Если сообщение требует параметр, он передается в параметре AParam.

function ReportError(const AParam: PWideChar): integer; overload;

Выводит нестандартное сообщение об ошибке.

Подробнее смотрите в заголовочных файлах, находящихся в архиве с примером тестового плагина.


Функции

GetSystemMetrics <переменная> <индекс метрики>

Возвращает значение системной метрики по заданному индексу.

Параметры

переменная | Имя переменной, в которое будет записано значение.
индекс метрики | Числовой индекс необходимой метрики. Их значения можно взять, например, здесь.

SystemParametersInfo <переменная> <индекс параметра>

Параметры

переменная | Имя переменной, в которое будет записано значение.
индекс параметра | Числовой индекс необходимого параметра. Их значения можно взять, например, здесь (см. комментарии к статье). Не все значения поддерживаются, в случае передачи неподдерживаемого значения будет выдано сообщение об ошибке.

GetSysColor <переменная> <индекс цвета>

Параметры

переменная | Имя переменной, в которое будет записано значение.
индекс цвета | Числовой индекс системного цвета. Их значения можно взять, например, здесь. В случае передачи неподдерживаемого значения будет выдано сообщение об ошибке.