Главная страница
    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.028 c
1-1099647626
TankMan
2004-11-05 12:40
2004.11.28
Ни кто не видал ListBox(или аналог), в котором реалезована


6-1095357819
Роман
2004-09-16 22:03
2004.11.28
Как запретить отключение графики в WB?


11-1082957420
earl Grey
2004-04-26 09:30
2004.11.28
Автоматически ломается KOL - проект


1-1100276038
Petia
2004-11-12 19:13
2004.11.28
Форма


1-1100290519
ForeSt
2004-11-12 23:15
2004.11.28
EDIT





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский