Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Проблема с хуком на мышь


Автор: Delist 1.7.2005, 10:30
Есть хук на мышь, который отлавливает нажатие правой кнопки и что-то делает с активным окном(думаю это не важно). Всё работает нормально, пока указатель не попадает на границу экрана(там он принимае форму растягивающей стрелки). В этом случае ниакой реакции на нажатие правой кнопки у окна нет smile.

Может кто знает, как с этим можно бороться? Заранее спасибо.

Автор: Quadr0 1.7.2005, 11:01
...

Автор: Delist 1.7.2005, 11:41
Спасибо за идею, но это не совсем подошло. Если параметр code сравинвать с HCBT_MOVESIZE, то он реагирует только на левую мышь, при условии, что размер окна всё-таки изменили. А если сравнивать с HCBT_CLICKSKIPPED, то событие генерируется, сразу как только указатель наведён на границу окна.

Автор: Alex 3.7.2005, 00:14
Delist, а хук стоит для приложения или для всей системы? Не мешало бы код посмотреть.

Автор: Delist 3.7.2005, 09:06
Alex Ловушка установлена для всей системы.

Код обработки сообщения предлельно прост:
Код
procedure HookProc(code: Integer; wParam, lParam: Longint); stdcall;
var
  h: hwnd;
  //Mosestruct: PMouseHookStruct;
begin
CallNextHookEx(HookHandle, code, wParam, lParam);
if code=HC_ACTION then
  if wParam = WM_RBUTTONDOWN then begin
    h:=GetForegroundWindow;
    SetWindowText(h,'RightButtonDown(WH_MOUSE)');
    end;
end;


Код установки ловушки:

Код
function SetHook(State: Boolean): boolean; export; stdcall;
begin
Result:=false;
if State and (HookHandle=0) then begin
  HookHandle:=SetWindowsHookEx(WH_MOUSE, @HookProc, HInstance, 0);
  Result:=(HookHandle<>0);
  end
else if (State=false) and (HookHandle<>0) then begin
  UnhookWindowsHookEx(HookHandle);
  HookHandle:=0;
  Result:=true;
  end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)