![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ох уж эти хуки..... [D6]
SPeller © (2002-05-21 17:03:00)Здрасьте! Наверно мои слова повторялись десять тысяч раз. Проблема такая: ставлю хук, а при обработке сообщения вылазит ошибка.
...
callwndproc:=hookproc;
hhook:=setwindowshookex(wh_getmessage,@callwndproc,hinstance,getcurrentthreadid);
...
function tform1.Hookproc(hc:integer;wParam:word;lParam:longint):longint;stdcall;
var cwp:tmsg;
begin
if lparam<>0 then begin
cwp:=tmsg(pointer(lparam)^);
if (cwp.message=wm_paint)then begin // Тут вылазит ошибка
.....
end;
end;
result:=0;
end;
В указанном месте вылазит ошибка "Access violation at address XXXX....."
Чего ей не хватает???
MBo (2002-05-21 17:47:00) [1]ошибка в том, то Hookproc не должна быть методом объекта
AFROLOV (2002-05-21 17:23:00) [2]Может и не лучшая реализация но работает:
Function WndHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM): LRESULT;stdcall;
var
PMsgSt:^tagMSG;
MsgStruct:tagMSG;
....
begin
.....
PMsgSt:=Pointer(ParamL);
MsgStruct.hwnd:=PMsgSt^.hwnd;
MsgStruct.message:=PMsgSt^.message;
MsgStruct.wParam:=PMsgSt^.wParam;
MsgStruct.lParam:=PMsgSt^.lParam;
MsgStruct.time:=PMsgSt^.time;
MsgStruct.pt.X:=PMsgSt^.pt.x;
MsgStruct.pt.y:=PMsgSt^.pt.y;....
end;
....
WndHookHandle:=SetWindowsHookEx(WH_GETMESSAGE, @WndHook, HInstance, TreadId);
....