Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хук на мышь. [D5, Win2k]


UNIVERSAL ©   (2004-02-04 17:04:00) 

Здравствуйте, коллеги.
Хотелось поставить два хука на мышь и на клаву. С клавой всё окей, а вот мышь почему-то шлёт сама сообщения WM_MOUSEMOVE, даже когда она неподвижна.
Как ставлю хук собственно:

function JRProc(nCode : Integer; wParam, lParam: integer): LResult; stdcall;
var msg:UINT ;
begin
if nCode = HC_ACTION then
begin
 msg:=tagEVENTMSG(pointer(lparam)^).message;
 if (msg=WM_KEYDOWN)or(msg=WM_KEYUP) or (msg=WM_LBUTTONDOWN) or  (msg=WM_LBUTTONUP) or (msg = WM_MOUSEMOVE)
    or  (msg=WM_MOUSEWHEEL) or (msg=WM_RBUTTONDOWN) or (msg =WM_RBUTTONUP)  then
  begin
   SendMessage(rHookRec^.WndHandle ,WM_RESETTIMER,msg ,0);
//    MessageBox(0,pchar(m), pchar(''),16);
  end;
end;
Result := CallNextHookEx(rhookrec^.JRHookHandle, nCode, wParam, lParam);
end;



второй способ, вернее сначала был этот, а выше второй

function MProc(nCode : Integer; wParam, lParam: integer): LResult; stdcall;
begin
if nCode >= 0 then
begin
{  if (nCode=HC_ACTION) then
  begin}
    if (wParam =WM_LBUTTONDOWN) or  (wParam =WM_LBUTTONUP) or (wParam = WM_MOUSEMOVE)
    or  (wParam =WM_MOUSEWHEEL) or (wParam =WM_RBUTTONDOWN) or (wParam =WM_RBUTTONUP) then
     SendMessage(rHookRec^.WndHandle ,WM_RESETTIMER,0,0);

//    MessageBeep(255);
//   end;
end;
Result := CallNextHookEx(rhookrec^.MHookHandle, nCode, wParam, lParam);
end;


Функция установки хука

procedure SetHooks;
begin
rHookRec^.JRHookHandle  := SetWindowsHookEx(WH_JOURNALRECORD ,@JRProc,HInstance,0);
//или
rHookRec^.MHookHandle  := SetWindowsHookEx(WH_MOUSE,@MProc,HInstance,0);
end

Это всё.
Хук нужен для отслежки активности пользователя, т.е. двигает ли он мышью или стучит ли он по клавишам, если определенное время нет - то блокирую тачку.
Так вот что я делаю не так? Заранее спасибо.
ЗЫ. Разумеется хуки в DLL находятся.


UNIVERSAL   (2004-02-05 09:22:00) [1]

2 VMcL ©Большое спасибо - заработало. Только на мой предыдущий вопрос я так и не нашёл ответа, если подскажете буду благодарен.


UNIVERSAL   (2004-02-05 08:46:00) [2]

А просто интересно почему WM_MOUSEMOVE шлётся? я ведь мышь не трогаю - курсор соответственно не двгается. Если есть объяснение этому буду благодарен. И как я понял ошибки в моём коде нет, так?


VMcL   (2004-02-04 20:16:00) [3]

Проверяй xPos и yPos.


Наверх

Титульная страница Поиск, карта сайта Написать письмо