-
Всем привет.
Столкнулся с проблемой. Есть хук на мышь, который отлавливает сообщение WM_MOUSEHWHEEL. Если я нажимаю колесо на мыши, то хук срабатывает и ловит это сообщение, все нормально. Но возникла необходимость программно послать это сообщение окну (потоку), но хук его почему то не перехватывает. Помогите решить проблему.
var MouseHook: HHOOK;
function CallMouseHook( Code: Integer; wParam: wParam; lParam: lParam ): LongInt; stdcall; begin case wParam of WM_MOUSEHWHEEL: ShowMessage( '' ); end; Result := CallNextHookEx( MouseHook, Code, wParam, lParam ); end;
procedure TForm1.FormCreate(Sender: TObject); begin MouseHook := SetWindowsHookEx( WH_MOUSE, @CallMouseHook, 0, GetCurrentThreadID ); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if MouseHook > 0 then begin UnHookWindowsHookEx( MouseHook ); MouseHook := 0; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin // Так не работает PostMessage( Handle, WM_MOUSEHWHEEL, 0, 0 ); // И так не работает PostThreadMessage( GetCurrentThreadID, WM_MOUSEHWHEEL, 0, 0 ); end;
На значения параметров LParam и WParam внимания не обращайте, сейчас главное чтобы хук перехватил сообщение, посланное программно.
-
SendMessage
-
Это первое, что я попробовал, но увы не работает, как не работает и метод Preform.
-
попробуйте отправить WM_MOUSEHWHEEL в wParam
-
Так? SendMessage( Handle, WM_MOUSEHWHEEL, WM_MOUSEHWHEEL, 0 );
не работает...
-
при работающем WM_MOUSEHWHEEL Code какой?
-
3 (HC_NOREMOVE)
|