Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Хук на мышь.   Найти похожие ветки 

 
UNIVERSAL   (2004-02-04 17:04) [0]

Здравствуйте, коллеги.
Хотелось поставить два хука на мышь и на клаву. С клавой всё окей, а вот мышь почему-то шлёт сама сообщения 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 находятся.


 
VMcL ©   (2004-02-04 20:16) [1]

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.04 c
3-1079266057
Floppy
2004-03-14 15:07
2004.04.11
Открыть запароленную базу (*.mdb)


6-1075976939
Alexis
2004-02-05 13:28
2004.04.11
сетевое имя и WorkGroup


11-1059567907
Aser2k
2003-07-30 16:25
2004.04.11
А где в KOL какой-нибудь StringGrid или что-то вроде ???


1-1082946109
Женя
2004-04-26 06:21
2004.04.11
как удалить все файлы из каталога ?


3-1081841088
skostigin
2004-04-13 11:24
2004.04.11
Delphi 6, InterBase