Тема: AHK: Как определить параметры для PostMessage
Здравствуйте,
подскажите пожалуйста как получить параметры PostMessage для управления приложением через его меню, например
PostMessage, 0x111, 57603,
откуда взят параметр 57603?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте,
подскажите пожалуйста как получить параметры PostMessage для управления приложением через его меню, например
PostMessage, 0x111, 57603,
откуда взят параметр 57603?
Еще бы сам spy++ выложили, а то по ссылочке открывается aliexpress.
А какую вы ссылку нажимаете?
По моей открываются ссылки на программу:
http://mdb-blog.blogspot.com/2010/11/mi … nload.html
Запустил Paint, запустил spy++, выделил окно Paint, открыл окно Message.
Как мне определить тип сообщения (по идее должен быть WM_COMMAND, но в логе такого не нахожу) и код (мне необходимо активировать меню Вставить).
Paint имеет ленточное меню - Windows 7.
С пейнтом не получится - у него нестандартное меню.
Что значит "активировать меню вставить", там сообщения "WM_COMMAND" проходят.
Там - это где?
В пейнте при нажатии мышкой на кнопку Paste в меню?
Ну и что тут такого страшного?:
SetControlDelay -1
ControlClick, NetUIHWND1, Безымянный,,,, NA x32 y118
А разве автор вопроса спрашивал про ControlClick?
Как не просил?
Тс: "Как мне определить тип сообщения".
Вы: "С пейнтом не получится - у него нестандартное меню".
Ответ:
SendMessage, 0x201, 1, ((118<<16)^32), NetUIHWND1, Безымянный
SendMessage, 0x202 , 0, ((118<<16)^32), NetUIHWND1, Безымянный
С пейнтом не получится - у него нестандартное меню.
Был ответ на то, почему не видно WM_COMMAND.
На что вы написали, что WM_COMMAND сообщения проходят.
Ну и... сообщения WM_COMMAND проходят.
Тогда приведите пример WM_COMMAND сообщения при нажатии Paste в меню.
Тогда приведите пример WM_COMMAND сообщения при нажатии Paste в меню.
А не нужно WM_COMMAND на нажатие Paste, тс просил определить тип сообщения по нажатию на Paste.
Хорошо, но зачем же вы тогда утверждаете, что WM_COMMAND сообщения проходят?
А что, разве это не так?
По кругу пошли.
Тогда приведите пример WM_COMMAND сообщения при нажатии Paste в меню.
Просто мне не понятно, зачем вызывать это меню, если их подпункты можно вызывать с помощью WM_COMMAND.
А мне непонятно, почему вы утверждаете, что WM_COMMAND сообщения проходят, но код показать не хотите.
Зато предлагаете послать ControlClick, WM_LBUTTONDOWN, WM_LBUTTONUP.
Вангую, следующее ваше предложение будет послать Paste через WM_COMMAND от шортката Ctrl+v.
Да причем здесь мои ответы. Просто как не посмотри, но ваш ответ: "С пейнтом не получится - у него нестандартное меню". Не просто не верный, а ошибочный. Вот на это я хотел обратить внимание.
Да причем здесь мои ответы
Ну как это при чем?
Если вы что-то утверждаете, а кто-то с этим не согласен, то могут возникнуть вопросы, на которые лучше всего ответить кодом.
Если бы вы со мной не согласились и привели бы код из 11 поста у меня к вам бы вопросов не было, так как мой ответ был исключительно по поводу команды WM_COMMAND.
Но вы начали утверждать, что у вас WM_COMMAND проходят.
Или все-таки не проходят?
Я имел в виду, что для чего "активировать меню", если там есть сообщения WM_COMMAND для каждого параметра.
Я вас не понимаю.
Про какие параметры речь?
У вас такой Paint?
По-моему, вам сюда.
А при чем тут нечестные владения спора?
Если у вас такой пейнт и у вас есть сообщения WM_COMMAND для каждого параметра, то скажите мне какие параметры wm_command для активации лупы?
SendMessage, 0x111, 66141,,,A
А как вы это значение получили?
У меня ни spy++ ни winspector его не показывает.
Вспомнил этот хак.
$F10::
Loop % 0xFFFFFFFF {
SendMessage, 0x111, A_Index,,, ahk_class MSPaintApp
if ErrorLevel {
ToolTip % A_Index
Pause
}
}
$F11::Pause
При появлении ToolTip'а смотрим на реакцию, что выделено, что появилось. Иногда нужно сначала поводить по пайнту мышью, чтобы выделение сменилось. Определили — жмём F11.
Так можно и другие приложения исследовать.
А почему тогда spy++ не отлавливает?
Ну это скорее всего один из предусмотренных механизмов управления, в самом приложении наверно он не используется.
Наверное так оно и есть.
На всякий случай проверил с API Monitor - результат такой же.
Ещё возможно, что такой механизм использовался в ранних версиях, а нынешним достался по наследству.
Paint из XP.
teadrinker, при бруте вашим кодом в MS Word 2007 ErrorLevel ловит одну команду из пяти, остальные оставляют ErrorLevel равным 0. Проще сделать паузу безусловной.
У меня ловит подряд начиная с 601 — Выделить, 602, 603, 604 и т. д., пробовал на семёрке и на десятке. Может имеет смысл Sleep, 10 добавить.
Проще сделать паузу безусловной.
Ну это если есть желание убить пару вечеров, то можно.
Вру, в пейнте ловит как у вас, в Word 2007 половина команд выполняются с ErrorLevel = 0.
Если использовать PostMessage, тогда пауза обязательна, т. к. PostMessage не предусматривает ожидания ответа.
Неправильно выразился. SendMessage может вызывать команду, даже если ее возврат (ErrorLevel) равен 0.
Так в принципе так и должно быть, что если приложение wm_command обрабатывает, то возвращает 0.
А тут видно в этом и заключается хак - приложение это сообщение не обрабатывает, но действие выполняет.
Непонятно только почему.
svoboden, как вы обнаружили значения wm_command?
Так же, как и teadrinker.
Попробовал ловить с помощью Вашего скрипта, в результате - при выделении любого пункта верхнего меню Paint A_Index определяется как 601 (F10), при нажатии F11 - 602
Подставляю значение в SendMessage:
SendMessage,0x111,601,,,ahk_class MSPaintApp
Никакого результата, может я не так что-то делаю. Помогите пожалуйста.
Так проверьте это сами кодом из 29 поста.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться