Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизНепонятная работа хука на 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.031 c