Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

Непонятная работа хука на WH_GETMESSAGE   Найти похожие ветки 

 
bigcrush   (2004-11-02 10:40) [0]

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

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

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


 
TUser ©   (2004-11-02 10:49) [1]


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

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


 
Digitman ©   (2004-11-02 10:52) [2]


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


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


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

не так.
Я сначала проверяю ловятся ли они вообще, а уж потом блокировать собираюсь. Пока у меня просто заглушка стоит 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 отлавливаемого окна и др.


 
bigcrush   (2004-11-02 11:02) [4]

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


 
TUser ©   (2004-11-02 11:09) [5]

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


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

2bigcrush   (02.11.04 11:02) [4]

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


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

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


 
Digitman ©   (2004-11-03 08:01) [8]


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


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


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

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

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


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

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


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


> bigcrush   (03.11.04 16:10) [9]


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


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

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


 
Digitman ©   (2004-11-05 09:26) [13]


> bigcrush   (04.11.04 07:36) [12]


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
14-1101816466
h00k
2004-11-30 15:07
2004.12.19
Помогите с задачкой


6-1097094870
Zhuk
2004-10-07 00:34
2004.12.19
TClientSocket и TServerSocket


1-1101931887
Гость
2004-12-01 23:11
2004.12.19
Delphi 2005 - портится русский текст в Version Info


14-1101437102
Думкин
2004-11-26 05:45
2004.12.19
С днем рождения! 26 ноября


1-1102156599
PURGEN
2004-12-04 13:36
2004.12.19
мат. функция