Вы можете задать любой вопрос по программе Autohotkey в нашей группе Вконтакте. Если решение требует более высокой квалификации- можно обратиться непосредственно ко мне.
Группа Вконтакте | Электронная почта | Симаков Яков ВК |
by Rajat
Здесь обсуждаются команды PostMessage и SendMessage, и содержатся ответы на некоторые вопросы, такие, как:
"Как нажать кнопку в свернутом окне?"
"Как выбирать пункт меню, если WinMenuSelectItem не работает?!"
"Это – окно со скином..., как послать ему команду, которая будет работать?"
"и что насчет скрытых окон?!"
Требования: AutoHotkey v1.0.09+ и Winspector Spy
В качестве первого примера, обратите внимание, что WinMenuSelectItem не будет работать с меню "New Message" в окне Outlook Express'а. Другими словами, следующий код не сработает:
Но PostMessage может сделать это:
Работает! Но что это за цифры? 0x111 - шестнадцатеричный код сообщения wm_command, а 40239 - код, который это специфическое окно понимает как выбор пункта меню 'Insert Picture'. Теперь позвольте мне рассказать вам, как найти значение типа 40239:
Для следующего примера я возьму Paint, потому что, скорее всего, он есть у каждого. Например, вы хотите в панели инструментов выбрать инструмент, используя AutoHotkey; скажем, должен быть выбран инструмент «пипетка».
Что вы сделаете? Наиболее логично кликнуть мышью на кнопке в панели «Набор инструментов», правильно? Но эта панель может быть перемещена или скрыта. Тогда этот пункт вашего скрипта не сработает. Но нижеуказанная команда все равно будет работать:
Другое преимущество PostMessage состоит в том, что нужное окно может быть на заднем плане; в отличие от этого, клики мыши требуют, чтобы окно было активным.
Вот еще некоторые примеры. Обратите внимание: я использую WinXP Pro (SP1)... Если вы используете другую операционку, тогда ваши параметры могут измениться (только для приложений Wordpad и Блокнот, которые поставляются с Windows; для других приложений параметры не должны измениться):
Примеры выше используют PostMessage. SendMessage работает точно так же, но вдобавок ждет возвращаемого значения, которое может использоваться для вещей типа получения играющей в настоящее время дорожки в Winamp (см. для примера в оригинале справки статью Automating Winamp).
Вот еще некоторые замечания:
ВНИМАНИЕ: есть приложения, с которыми эта методика не работает. Иногда удачно, а иногда – нет, я применял эту методику с VB и Delphi приложениями. Лучше всего эта методика работает с приложениями C, C++. С VB приложениями 'LParam' той же самой команды может меняться от запуска к запуску. А в некоторых Delphi приложениях, GUI (графический интерфейс пользователя, т.е. окна) вовсе не используют wm_command. Тогда можно использовать клики мыши.
Вперед к исследованиям..., и делитесь вашими исследованиями на Форуме AutoHotkey. Приходите - добро пожаловать!
Это руководство не предназначено для полных новичков (надеюсь, никто не обидится), так как эти команды считаются продвинутыми. Так, если после прочтения вышеупомянутого вы ничего не поняли – просто забудьте это.