Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

Хук на WH_GETMESSAGE   Найти похожие ветки 

 
Alexis ©   (2004-10-13 20:02) [0]

Я ставлю hook на все системные сообщения :
GlobalData^.SysHookWin := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, HInstance, 0);

А вот вопрос-как в ф-ции GetMsgProc определить, что пришло сообщение WM_ACTIVATE? Насколько я знаю, информация о пришедшем сообщении содержится в lParam, но lParam занимает 4 байта, а WIN-сообщения только один...
Попробовал так:

function GetMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
newmsg : ^tagMSG;

begin
new(newmsg);
newmsg := @lParam;

if newmsg.message = WM_ACTIVATE then
  MessageBox(0, "WM_ACTIVATE occured.", "info", MB_ICONINFORMATION);

if code < 0 then
 begin
   Result:= CallNextHookEx(GlobalData^.SysHookWin, Code, wParam, lParam);
   Exit;
 end;
 ...

Но при смене активного окна мой MessageBox не появляется. Как определить сообщение, пришедшее в ф-цию?
Заранее спасибо.


 
Alexis ©   (2004-10-13 20:17) [1]

Только что нашел LookUpTheMessage(). Не это случайно?


 
DVM ©   (2004-10-13 20:38) [2]

Я бы хотел поглядеть, что станет с твоей системой, как только ты наконец поймаешь WM_ACTIVATE. Не ставь туда MessageBox(), поставь звуковой сигнал что-ли. Но это так к слову.

if TMsg(Pointer(lParam)^).message = WM_ACTIVATE then ...

Другие сообщения ловушка ловит???


 
Alexis ©   (2004-10-15 12:02) [3]

function GetMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin

if code < 0 then
 begin
   Result:= CallNextHookEx(GlobalData^.SysHookWin, Code, wParam, lParam);
   Exit;
 end;

if TMSG(Pointer(lParam)^).message = WM_ACTIVATE then
 MessageBox(0, "WM_ACTIVATE", "INFO", MB_ICONINFORMATION);

if TMSG(Pointer(lParam)^).message = WM_KEYDOWN then
 MessageBox(0, "WM_KEYDOWN", "INFO", MB_ICONINFORMATION);

if TMSG(Pointer(lParam)^).message = WM_KEYUP then
 MessageBox(0, "WM_KEYUP", "INFO", MB_ICONINFORMATION);

 Result := CallNextHookEx(GlobalData^.SysHookWin, Code, wParam, lParam);

end;

При нажатии(отпускании) клавишы в любом приложении соответствующие MessageBox прекрасно срабатывают, а при смене активного окна "WM_ACTIVATE" по-прежнему не показывается! В чем здесь грабли?


 
DVM ©   (2004-10-15 15:36) [4]


> активного окна "WM_ACTIVATE" по-прежнему не показывается!
> В чем здесь грабли?

Может ловить WM_ACTIVATEAPP?


 
Alexis ©   (2004-10-16 17:04) [5]

if TMSG(Pointer(lParam)^).message = WM_ACTIVATEAPP then
MessageBeep($FFFFFFFF);

Пробовал-реакция нулевая. Ни при одной смене окна сигнал не выдается!
Plz, help кто-нибудь!


 
DVM ©   (2004-10-17 10:08) [6]


> Alexis ©   (16.10.04 17:04) [5]

Ловушка, надеюсь, в dll???


 
Alexis ©   (2004-10-17 14:17) [7]


> Ловушка, надеюсь, в dll???

Разумеется.
Я же ведь писал:

> При нажатии(отпускании) клавишы в любом приложении соответствующие
> MessageBox прекрасно срабатывают

Если бы ловушка была не в DLL, перехват нажатия клавиш во всех приложениях не происходил бы наверное...


 
DVM ©   (2004-10-17 14:34) [8]

Попробуй использовать хук WH_SHELL - тот точно отслеживает активацию окна без проблем.


 
Alexis ©   (2004-10-17 14:39) [9]

Может у тебя есть кусок кода с установкой WH_SHELL? Был бы очень признателен...



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

Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.033 c
3-1099233673
Sam Stone
2004-10-31 17:41
2004.11.28
ADO и MDB


4-1096624185
MadSliMX
2004-10-01 13:49
2004.11.28
Как определить заголовок активного окна


3-1098961483
BigError
2004-10-28 15:04
2004.11.28
Что-то никак не соображу как правильно сделать..


14-1100262738
asdqwer
2004-11-12 15:32
2004.11.28
VOB->AVI


14-1100107401
lipskiy
2004-11-10 20:23
2004.11.28
Посоветуйте формат хранения данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский