-
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.