AutoHotkey PostMessage

Изпратете съобщение до прозорец или неговия контрол (контрол). SendMessage също чака потвърждение.

съобщНомер на съобщението (може да бъде израз). Номерата на някои съобщения можете да намерите в статията „Кодове на съобщения в прозорци“.
wParamПървият компонент на съобщението (може да е израз). Ако е пропуснато или празно, ще бъде изпратено 0.
lParamВторият компонент на съобщението (може да е израз). Ако е пропуснато или празно, ще бъде изпратено 0.
контролконтрол. Ако е пропуснато или празно, съобщението ще бъде изпратено директно до посочения прозорец. Може да се посочи като ClassNN (името на класа и номера на този екземпляр) или като име/текст на контролата. Всички тези стойности могат да бъдат определени с помощта на програмата Window Spy. Когато използвате име/текст, методът за търсенето им може да бъде зададен с командата SetTitleMatchMode.

За да укажете контрола чрез нейния HWND (манипулатор на прозорец), оставете параметъра Control празен и задайте ahk_id %ControlHwnd% като стойност на параметъра WinTitle - това също работи за скрити контроли, дори ако откриването на скрит прозорец (команда DetectHiddenWindows) не е активирано. HWND обикновено се намира чрез командите ControlGet Hwnd, MouseGetPos или DllCall.WinTitleЗаглавието или част от заглавието на прозореца (методът на търсене може да бъде зададен с командата SetTitleMatchMode). Ако този и следващите 3 параметъра са пропуснати, ще се използва последният намерен прозорец. Ако параметърът е зададен на буква A и следните 3 параметъра са пропуснати, ще се използва активният прозорец. За да дефинирате прозорец чрез неговия клас, използвайте конструкцията ahk_class ExactClassName (може да се види с Window Spy). За да използвате ID на процеса (PID), задайтепараметър като ahk_pid %VariableContainingPID%. За да използвате група прозорци, посочете параметъра като ahk_groupGroupName. За да използвате ID на прозореца, задайте параметъра на ahk_id %VariableContainingID%. Можете да стесните търсенето си, като посочите няколко критерия, като My File.txt ahk_class Notepad.wintextПодниз от един текстов елемент на прозорец (може да се види с Window Spy). Скритите текстови елементи се откриват, ако откриването на скрит текст е активирано (команда DetectHiddenText).ExcludeTitleПрозорци, чието заглавие включва стойността на този параметър, са изключени.ExcludeTextПрозорци, чийто текст включва стойността на този параметър, се изключват.

ErrorLevel

PostMessage: null, ако програмата е завършила успешно; иначе 1.

SendMessage: ErrorLevel съдържа думата FAIL, ако има проблем. В противен случай съдържа числовия резултат от съобщението, което понякога може да бъде "отговор", в зависимост от типа на съобщението и целевия прозорец.

Бележки

Тези команди трябва да се използват внимателно, тъй като изпращането на съобщение до грешен прозорец (или изпращането на грешно съобщение) може да доведе до неочаквана реакция на приложението или до срив. Причината е, че повечето приложения не са проектирани да получават определени видове съобщения от външни източници.

PostMessage поставя съобщение в опашката със съобщения, свързана с посочения прозорец. Тя не чака потвърждение или отговор. Обратно, SendMessage изчаква до 5 секунди за целевия прозорец, за да обработи съобщението. Ако съобщението не бъде обработено в рамките на 5 секунди, командата прекратява и задава променливата ErrorLevel на FAIL.

Параметри Msg, wParam иlParam трябва да бъде цели числа между -2147483648 и 4294967295 (0xFFFFFFFF). Както обикновено в AutoHotkey, префиксът 0x означава шестнадесетично число. Например 0xFF е еквивалентен на 255.

От версия 1.0.43.06 низ, поставен в MyVar от получателя на съобщение, се разпознава правилно, без да са необходими допълнителни стъпки. Това обаче работи само ако първият знак на параметъра е амперсанд (&). Например 5+&MyVar няма да работи, но &MyVar или &MyVar+5 ще работи.

От версия 1.0.40.05 низ в кавички (буквен низ) също може да бъде изпратен; оператор & не се използва в този случай. Например:

За да изпратите съобщение до всички прозорци в системата, включително тези, които са скрити или блокирани, задайте параметъра WinTitle на ahk_id 0xFFFF (0xFFFF означава съобщение HWND_BROADCAST). Този метод трябва да се използва само със съобщения, които са предназначени да бъдат излъчвани до всички прозорци. Пример:

За да позволите на самия скрипт да получава съобщения, използвайте функцията OnMessage().

Вижте също статията „Изпращане на съобщения до прозорец или неговите контроли“ за информация относно използването на тези команди.

Заглавията на прозорците и текстът са чувствителни към главни и малки букви. Скритите прозорци не се откриват, освен ако не са посочени от командата DetectHiddenWindows.