AutoHotkey PostMessage
Изпратете съобщение до прозорец или неговия контрол (контрол). SendMessage също чака потвърждение.
съобщ | Номер на съобщението (може да бъде израз). Номерата на някои съобщения можете да намерите в статията „Кодове на съобщения в прозорци“. |
wParam | Първият компонент на съобщението (може да е израз). Ако е пропуснато или празно, ще бъде изпратено 0. |
lParam | Вторият компонент на съобщението (може да е израз). Ако е пропуснато или празно, ще бъде изпратено 0. |
контрол | контрол. Ако е пропуснато или празно, съобщението ще бъде изпратено директно до посочения прозорец. Може да се посочи като ClassNN (името на класа и номера на този екземпляр) или като име/текст на контролата. Всички тези стойности могат да бъдат определени с помощта на програмата Window Spy. Когато използвате име/текст, методът за търсенето им може да бъде зададен с командата SetTitleMatchMode. |
За да укажете контрола чрез нейния HWND (манипулатор на прозорец), оставете параметъра Control празен и задайте ahk_id %ControlHwnd% като стойност на параметъра WinTitle - това също работи за скрити контроли, дори ако откриването на скрит прозорец (команда DetectHiddenWindows) не е активирано. HWND обикновено се намира чрез командите ControlGet Hwnd, MouseGetPos или DllCall.
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.