Перейти на главную страничку сайта (список статей, файлы для скачивания)
Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.
Оригинал статьи в AutoHotkey.chm: "Send Messages to a Window or Its Controls", по ссылке из статьи "PostMessage / SendMessage", в содержании - "Window Management" - "Controls" - "PostMessage/SendMessage".
Ник переводчика: Androgen Belkin.
by Rajat
Здесь обсуждаются команды PostMessage и SendMessage, и содержатся ответы на некоторые вопросы, такие, как:
"Как нажать кнопку в свернутом окне?"
"Как выбирать пункт меню, если WinMenuSelectItem не работает?!"
"Это – окно со скином..., как послать ему команду, которая будет работать?"
"и что насчет скрытых окон?!"
Требования: AutoHotkey v1.0.09+ и Winspector Spy (http://www.windows-spy.com).
В качестве первого примера, обратите внимание, что WinMenuSelectItem не будет работать с меню "New Message" в окне Outlook Express'а. Другими словами, следующий код не сработает:
WinMenuSelectItem, New Message,, &Insert, &Picture...
Но PostMessage может сделать это:
PostMessage, 0x111, 40239, 0, , New Message
Работает! Но что это за цифры? 0x111 - шестнадцатеричный код сообщения wm_command, а 40239 - код, который это специфическое окно понимает как выбор пункта меню 'Insert Picture'. Теперь позвольте мне рассказать вам, как найти значение типа 40239:
Для следующего примера я возьму Paint, потому что, скорее всего, он есть у каждого. Например, вы хотите в панели инструментов выбрать инструмент, используя AutoHotkey; скажем, должен быть выбран инструмент «пипетка».
Что вы сделаете? Наиболее логично кликнуть мышью на кнопке в панели «Набор инструментов», правильно? Но эта панель может быть перемещена или скрыта. Тогда этот пункт вашего скрипта не сработает. Но нижеуказанная команда все равно будет работать:
PostMessage, 0x111, 639,,, Безымянный - Paint
Другое преимущество PostMessage состоит в том, что нужное окно может быть на заднем плане; в отличие от этого, клики мыши требуют, чтобы окно было активным.
Вот еще некоторые примеры. Обратите внимание: я использую WinXP Pro (SP1)... Если вы используете другую операционку, тогда ваши параметры могут измениться (только для приложений Wordpad и Блокнот, которые поставляются с Windows; для других приложений параметры не должны измениться):
; меняет цвет шрифта на зеленый в Wordpad PostMessage, 0x111, 32788, 0, , Документ - WordPad ; открывает окно «О программе» в Блокноте PostMessage, 0x111, 65, 0, , Безымянный - Блокнот ; переключает «Перенос по словам» в Блокноте PostMessage, 0x111, 32, 0, , Безымянный - Блокнот ; play/pause в Windows Media Player PostMessage, 0x111, 32808, 0, , Windows Media Player ; заморозить горячие клавиши в выполняющемся скрипте MyScript.ahk! DetectHiddenWindows, on SetTitleMatchMode, 2 PostMessage, 0x111, 65305,,, MyScript.ahk - AutoHotkey
Примеры выше используют PostMessage. SendMessage работает точно так же, но вдобавок ждет возвращаемого значения, которое может использоваться для вещей типа получения играющей в настоящее время дорожки в Winamp (см. для примера в оригинале справки статью Automating Winamp).
Вот еще некоторые замечания:
SetTitleMatchMode, 2
DetectHiddenWindows, On
ВНИМАНИЕ: есть приложения, с которыми эта методика не работает. Иногда удачно, а иногда – нет, я применял эту методику с VB и Delphi приложениями. Лучше всего эта методика работает с приложениями C, C++. С VB приложениями 'LParam' той же самой команды может меняться от запуска к запуску. А в некоторых Delphi приложениях, GUI (графический интерфейс пользователя, т.е. окна) вовсе не используют wm_command. Тогда можно использовать клики мыши.
Вперед к исследованиям..., и делитесь вашими исследованиями на Форуме AutoHotkey. Приходите - добро пожаловать!
Это руководство не предназначено для полных новичков (надеюсь, никто не обидится), так как эти команды считаются продвинутыми. Так, если после прочтения вышеупомянутого вы ничего не поняли – просто забудьте это.
Перейти на главную страничку сайта (список статей, файлы для скачивания)
© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.