![]() |
|
|
#1
|
|||
|
|||
![]() Здравствуйте, помогите решить задачу.
Установил глобальный hook = SetWindowsHookEx(WH_CALLWNDPROCRET, @HookProc, HInstance, 0); Необходимо поймать сообщение WM_SETCURSOR. После запуска программы вылетает "Ошибка чтения памяти и её адрес" Однако если использовать hook WH_JOURNALRECORD то программа запускается и такие сообщения как: WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_KEYUP, WM_KEYDOWN ловятся. А вот WM_SETCURSOR Нет. Может я что-то не указываю? Или это сообщение нужно обрабатывать как-то? Спасибо. Листинг : Код:
var HookHandle: hHook; function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall; var msg: PEVENTMSG; begin if Code >= 0 then begin result := 0; msg := Pointer(LParam); with Form1 do case msg.message of WM_SETCURSOR : Label1.Caption:='Сообщение получено.'; end; end else result := CallNextHookEx(HookHandle, code, WParam, LParam); end; procedure TForm1.FormCreate(Sender: TObject); begin HookHandle := SetWindowsHookEx(WH_CALLWNDPROCRET, @HookProc, HInstance, 0); end; procedure TForm1.FormDestroy(Sender: TObject); begin if HookHandle <> 0 then UnhookWindowsHookEx(HookHandle); end; Admin: Пользуемся тегами для оформления кода, иначе последуют санкции! Последний раз редактировалось Admin, 02.06.2008 в 17:25. |