Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непонятная работа хука на WH_GETMESSAGE [D7, WinXP]


bigcrush ©   (2004-11-02 10:40:00) 

Здравствуйте, все.
Мне нужно отлавливать в определённом окне(чужом) сообщения WM_WINDOWPOSCHANGED, WM_WINDOWPOSCHANING, WM_MOVE и блокировать.
В MSDN написано, что по WH_GETMESSAGE можно изменять сообщение, что я и пытаюсь сделать(ставлю msg.message:=WM_NULL).

Проблема в том что эти сообщения не отлавливаются в нужно мне окне. Пробовал ставить хук на WM_CALLWNDPROC. Сообщения ловятся, но их нельзя изменить.

Подскажите, пожалуйста.


Digitman   (2004-11-05 09:26:00) [1]


> bigcrush   (04.11.04 07:36) [12]


можно, например, перехватить в АП целевого процесса точку входа в SendMessage-ф-цию, при обработке перехвата анализировать ее параметры и не вызывать оригинальную ф-цию при заданных тобой условиях

не знаю насколько это "больновато", но это тоже решение


bigcrush   (2004-11-04 07:36:00) [2]

А как правильнее и проще? Ч/з задний больновато :((


Digitman   (2004-11-03 16:22:00) [3]


> bigcrush   (03.11.04 16:10) [9]


ежели через задний проход - можно и так.


bigcrush   (2004-11-03 16:12:00) [4]

Я не со своей машины в инете, вот и спрашиваю. Только ч/з несколько дней доберусь до программирования.


bigcrush   (2004-11-03 16:10:00) [5]

Ясно. Спасибо. Буду искать другие способы для блокирования сообщений. Подскажите, чтобы мне не идти в неверном направлении.

Можно заменить оконную процедуру своей и принятые сообщения блокировать, для остальных вызывая старую процедуру. Естественно это буду делать в АП процесса, которому окно принадлежит. Так правильно?


Digitman   (2004-11-03 08:01:00) [6]


> то есть, если я вызываю SetWindowPos, то винда WM_MOVE напрямую
> в оконную процедуру посылает?


да.
только  не "посылает", а "вызывает".


bigcrush   (2004-11-03 07:50:00) [7]

2 Inc
то есть, если я вызываю SetWindowPos, то винда WM_MOVE напрямую в оконную процедуру посылает?


Inc   (2004-11-02 15:05:00) [8]

2bigcrush   (02.11.04 11:02) [4]

Так всё и должно быть.
WH_GETMESSAGE ловит только то, что через очередь
сообщений проходит (PostMessage).


TUser   (2004-11-02 11:09:00) [9]

Т.е. они хуком не ловятся? Покажи - как его ставишь.


bigcrush   (2004-11-02 11:02:00) [10]

на самом деле сообщения доходят. Они отлавливаются по WM_CALLWNDPROC, и Spyxx показывает, что сообщения пришли, но на WH_GETMESSAGE не реагирует.


bigcrush   (2004-11-02 10:59:00) [11]

не так.
Я сначала проверяю ловятся ли они вообще, а уж потом блокировать собираюсь. Пока у меня просто заглушка стоит MessageBox(0,0,0,0).

Только что попробывал у меня совсем не отлавливаюся эти сообщения ни в каких окнах.


function GetMsgProc(code:integer;wP:integer;lP:integer):integer; stdcall;
var msg:^TMessage;
   m:cardinal;
begin
if code<0 then
   begin
   result:=CallNextHookEx(data^.hook, code, wP, lP);
   exit;
   end;
msg:=PMessage(lP);
m:=msg^.message;
if (m=WM_WINDOWPOSCHANGING) or
  (m=WM_WINDOWPOSCHANGED) or
  (m==WM_MOVE) then MessageBox(0,0,0,0);
Result:=CallNextHookEx(data^.hook, code, wP, lP);
end;


data - это отображение в файл подкачки. Там hwnd отлавливаемого окна и др.


Digitman   (2004-11-02 10:52:00) [12]


> эти сообщения не отлавливаются в нужно мне окне


раз не "отлавливаются", значит они ему не адресуются.


TUser   (2004-11-02 10:49:00) [13]


> Проблема в том что эти сообщения не отлавливаются в нужно
> мне окне

Так ты ведь их блокируешь - они и не ловятся.


Наверх

Титульная страница Поиск, карта сайта Написать письмо