Инструменты пользователя

Инструменты сайта


ru:autorun:documentation:tweaks_setmessageaction

SetMessageAction

SetMessageAction [/P] <msg/msgname> <cmd> [params]

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

Параметры

<msg>
<msgname>
Числовое значение номера сообщения или строка для регистрации пользовательского номера сообщения.
<cmd>Строка с именем внутренней команды Autorun или пользовательской функции.
<params>Параметры команды или пользовательской функции (если применимо). Дополнительная информация в примечаниях.

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

/PОпционально. При заданном переключателе к имеющимся параметрам команды будут добавлены четыре параметра, переданные в сообщении: hWnd, uMsg, wParam и lParam.

Примечания

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

Настоятельно рекомендуется использовать только пользовательские сообщения с номерами 0x400 (WM_USER) и выше, в этом случае функция не проверяет номера сообщений в зарезервированном системой диапазоне, что ускоряет работу. Используйте обработчики для зарезервированных системных сообщений только в случае реальной необходимости и если вы точно осознаёте, что делаете, поскольку это может замедлить или даже нарушить работу Total Commander.

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

Всего можно привязать до 128 действий.

Пример

Код в конфигурации Autorun:

# Функция, которая будет выполнена при получении сообщения
Func MyMessageFunc()
  MsgBox "Сообщение получено"
EndFunc
 
# Привязываем функцию к сообщению, регистрируемому строкой "MyMessage"
SetMessageAction "MyMessage" MyMessageFunc
 
# Можно привязать к фиксированному номеру, но этот вариант менее надежен,
# поскольку случайным образом выбранный номер сообщения может пересечься 
# с уже используемым
SetMessageAction 55555 MyMessageFunc

Cкрипт на Autoit, вызывающий функцию «MyMessageFunc» по регистрируемому номеру:

; Регистрируем сообщение, заданное строкой "MyMessage"
$nMsg = DllCall("user32", "uint", "RegisterWindowMessageW", "wstr", "MyMessage")[0]
; Находим окно Total Commander
$hWnd = WinGetHandle("[CLASS:TTOTAL_CMD]")
; Отправляем зарегистрированное сообщение окну Total Commander
DllCall("user32", "lresult", "SendMessageW", "hwnd", $hWnd, _
                                             "uint", $nMsg, _
                                             "wparam", 0, _
                                             "lparam", 0)

Вызов с помощью утилиты TCFS2 по фиксированному номеру:

TCFS2.exe /ef "msg(55555, 0, 0)"

По регистрируемому номеру:

TCFS2.exe /ef "msg(regmsg(MyMessage), 0, 0)"
ru/autorun/documentation/tweaks_setmessageaction.txt · Последнее изменение: 2024/04/12 22:59 — loopback

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki