Конференция "WinAPI" » Hook на мышь и клавиатуру только в своем приложении [D7, WinXP]
 
  • Vladimir (19.12.07 09:57) [0]
    всем доброго дня!
    задача в том, чтобы отслеживать факт нажатия любой кнопки мыши в дочернем окне приложения (дабы сделать вывод, что пользователь работаетс этим окном). И если в течение 10 минут пользователь не предпринимает никаких действий - закрыть окно.
    ставлю локальный хук при показе этого окна:
    OnFormShow:
    CurMouseHook:=SetWindowsHookEx(WH_MOUSE, @MouseProc, HInstance, 0);

    function MouseProc(Code: Integer; wParam: LongInt; lParam: LongInt): LongInt; stdcall;
    begin
    case wParam of
     WM_LBUTTONDOWN, WM_RBUTTONDOWN: begin
       RecreateTimerInterval;
     end;
    end;
    Result:=CallNextHookEx(CurMouseHook, Code, wParam, lParam);
    end;



    проблема в том, что хук на мышь (как, впрочем, и на клавиатуру) срабатывает только один раз.
  • Сергей М. © (19.12.07 10:11) [1]

    > ставлю локальный хук


    Это не локальный хук.

    Да и нафих не нужен хук для решения такой простой задачи.

    Лови Application.OnMessage, фильтруй сообщения мыши и клавы, анализируй окно-приемник сообщения, взводи соответствующий этому окну 10-минутный таймер. Через 10 минут таймер сообщит, что время истекло, это и будет сигналом к закрытию окна.
  • Vladimir (19.12.07 11:06) [2]
    этот вариант я уже использовал... просто хотелось через хуки.
    все равно спасибо. )
    проблема была не в хуке, а в обновлении интервала ожидания.
  • MetalFan © (20.12.07 13:00) [3]

    > И если в течение 10 минут пользователь не предпринимает
    > никаких действий - закрыть окно.

    копай в сторону полезной функции GetLastInputInfo.

    > The GetLastInputInfo function retrieves the time of the
    > last input event.
 
Конференция "WinAPI" » Hook на мышь и клавиатуру только в своем приложении [D7, WinXP]
Есть новые Нет новых   [134431   +14][b:0][p:0.001]