Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

GetMessage

316
08 июля 2009 года
Alm3n
889 / / 29.05.2009
Доброго времени суток.
1)Могу ли я, вызвав в своей программе GetMessage, получить из очереди сообщение окна другой программы, указав в параметрах ее дескриптор?Тоесть,совершить перехват.
2)Вызвав тот же GetMessage в своей программе и удачно получив сообщение,вернется ли оно обратно в очредь сообщений?
3)Как я прочел,если в качестве параметра hwnd указать NULL,то в мое приложение будут направляться все сообщения,однако, одновременно при вызове двух приложений,моего и стороннего,ввод данных в стороннее никак не отображатеся в моем.Это зависит от фокуса?
4)Как узнать дескриптор окна стороннего приложения?
3.7K
08 июля 2009 года
0nni
326 / / 24.06.2008
1. Нет;
2. Нет;
3. Ты получишь все сообщения для своего процесса;
4. По какому признаку тебе нужно найти приложение? FindWindow(), WindowFromPoint() GetWindow() GetWindowEx() EnumWindows(), можешь даже перебирать все хендлы по порядку и вызывать isWindow()
1
08 июля 2009 года
kot_
7.3K / / 20.01.2000
Судя по вопросу вам нужна установка системного хука.
316
09 июля 2009 года
Alm3n
889 / / 29.05.2009
Цитата: kot_
Судя по вопросу вам нужна установка системного хука.


Да,но я не совсем понимаю политику хука,что именно он делает?Обрабатывает сообщение?
У меня обрисовалась небольшая картина.
Стороннее приложение вызывает GetMessage,из очереди запрашивается сообщение,потом обрабатывается TranslateMessage'ем и передается обратно в систему.Удобно было бы перехватывать сообщения после GetMessage,но как мне сказали,в очередь оно обратно не возвращается,из этого я сделал вывод что в стороннем приложении оно никак не отобразится,может я и ошибаюсь.
Еще один вариант перехватывать его сразу при помещении в очередь,я думаю структура сообщения содержит информацию о дескрипторе,который должен его получить.Обрабатывать сообщение не извлекая из очереди(хотя вряд ли это возможно,опять же,могу ошибаться),или извлекая(но помещая обратно),после чего стороннее приложение без каких либо потерь сможет им воспользоваться.
Где я ошибся и как мне лучше реализовать перехват?
Если можно,с названия используемых функций,что очень хорошо.
Извините за ламерство,пишу это все на масм,апи-тема для меня новая,а в сети оч мало по этому информации.

1
09 июля 2009 года
kot_
7.3K / / 20.01.2000
Если я не привел примера как это делается - то значит я знаю что достаточно ввести ключевое слово в гугл и информации вы получите более чем достаточно. Так что вперед.
Хук - это системный механизм, позволяющий обрабатывать сообщение до того, как они будут получены целевым окном. Хуки могут быть локальными и глобальными, но в не зависимости от этого всего существует:
* WH_CALLWNDPROC - срабатывает перед вызовом SendMessage.
* WH_CALLWNDPROCRET - после SendMessage.
* WH_GETMESSAGE - хук вызывается, когда вызывается GetMessage или PeekMessage.
* WH_KEYBOARD - срабатывает когда GetMessage или PeekMessage получают WM_KEYUP или WM_KEYDOWN из очеpеди сообщений.
* WH_MOUSE - хук вызывается, когда GetMessage или PeekMessage получают сообщение от мыши из очеpеди сообщений.
* WH_HADRWARE - хаpдваpное сообщение, не относящееся к клавиатуpе или мыши. Хук не документирован, я лично его не использовал. Возможно зарезервирован.
* WH_MSGFILTER - Этот тип хука используется для отслеживания сообщений, отправляемых меню, полосам прокрутки и диалоговым окнам. Не может быть глобальным.
* WH_SYSMSGFILTER - то же самое WH_MSGFILTER, но системный.
* WH_JOURNALRECORD - поместить сообщение в очередь сообщений Windows. Имеется ввиду апаратное прерывание. Не может быть локальным.
* WH_JOURNALPLAYBACK - Позволяет указать сколько времени ожидать перед обработкой события помещенное предыдущим. Не может быть локальным.
* WH_SHELL - хук вызывается для событий оболочки, либо создания и разрушения окна.
* WH_CBN - создание, разрушение перемещение окна.
* WH_FOREGROUNDIDLE - активный поток переходит в состояние ожидания.
* WH_DEBUG - позволяет вызывать его перед любым из хуков.

http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx
316
09 июля 2009 года
Alm3n
889 / / 29.05.2009
Большое спасибо.Эту информацию я уже читал,но там не было таких подробных коментариев,поэтому до конца и не понял.Теперь картина ясна.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог