Вообще SendMessage и PostMessage - две Win API функции, которые доступны не только в скрипт движке бота.
В нашем случае речь пойдет об их врапперах (обертках): Engine.SendMessage и Engine.PostMessage
Начнем как обычно с вопроса - что они делают?
Данные функции посылают некоторое сообщение одному или нескольким окнам. Важен тот факт, что отправлять сообщения можно и в свернутые окна! Разница между ними в том, что SendMessage отправляет сообщение и ждет, пока целевое окно это сообщение обработает, а PostMessage просто помещает сообщение в очередь и программа работает дальше. В случае, когда в сообщении задействованы указатели на динамически размещаемые данные, предпочтительно использовать SendMessage, т.к. иначе возможна ситуация, когда целевое окно начнет обрабатывать сообщение, указатели уже окажутся освобождены. Вообще, в обеих функциях требуется дескриптор (HWND) целевого окна, но т.к. мы рассматриваем обертки в виде команд скрипт движка, то там автоматически будет указан дескриптор текущего окна с игрой.
Что такое сообщение?
Это информация о некотором изменении в пользовательском интерфейсе, например перемещение окна или нажатие клавиши на клавиатуре\мышке. Сообщения также уведомляют программу, что истек заданный отрезок времени. Сообщения используются для операций с совместным использованием данных. С точки зрения программирования, сообщение - это целое значение без знака (Cardinal).
Сообщение можно представить следующей записью:
Message = record
msg : longint; // номер сообщения
lParam : longint; // информационные
wParam : longint; // поля
end;
В полях lParam и wParam содержится дополнительная информация о происшедшем событии, например, для сообщения wm_lbuttondown (нажатие ЛКМ) в lParam содержатся координаты указателя мыши момент нажатия кнопки мыши, в wParam содержатся сведения были ли нажаты клавиши Ctrl или Shift в момент нажатия кнопки мыши.
Зачем это все нужно?
С помощью этих команд можно реализовать свой кликер, например для заточки вещей и подобных задач. Кроме того можно вводить текст с клавиатуры, хотя для этого есть более удобная команда Engine.EnterText
Как это использовать?
Для того, чтобы послать сообщение, нужно знать что именно ты посылаешь, поэтому читаем документацию, гуглим и напрягаемся.
Сразу стоит отметить, что в скрипте нужно будет указывать именно код сообщения, т.е. число:
Engine.SendMessage($102, 65, 0);
Здесь $102 - это WM_CHAR message, 65 - код кнопки A, 0 - в зависимости от значения третьего параметра, он может иметь разный смысл, об этом как правило пишут там же, где и описание сообщения