![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятная работа хука на 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]
> Проблема в том что эти сообщения не отлавливаются в нужно
> мне окне
Так ты ведь их блокируешь - они и не ловятся.