Главная страница
    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
4-1097776220
dkDimon
2004-10-14 21:50
2004.11.28
Список папок/файлов


14-1100004423
TRyaSS
2004-11-09 15:47
2004.11.28
Кто знает C(си), помогите плз. перевести


14-1100166416
Григорьев Антон
2004-11-11 12:46
2004.11.28
Не только Архангельский зачётные книжки пишет :)


14-1100354736
Piter
2004-11-13 17:05
2004.11.28
Нашел одну вещь в Delphi


14-1100086499
Pentium133
2004-11-10 14:34
2004.11.28
Advanced Password Recovery





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