![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отследить время простоя моего приложения? [D7, WinXP]
Asail © (2005-12-19 14:42:00)Здрасте! Вот, возникло такое желание... Но, что-то я не пойму.
Сажаю обработчик на Application.OnIdle, сажаю на главную форму TTimer. Определяю глобальную переменную TimerCounter.
Далее, в случае OnIdle обнуляю TimerCounter, а в TfrmMain.Timer1Timer увеличиваю счетчик на 1 и если настало время, то что-то делаю. Работать не хочет...
Я так понимаю, что после каждого тика таймера заново наступает событие OnIdle и, соответсвенно обнуление TimerCounter.
Может, кто-нибудь подскажет чего-нибудь более умного?
Спасибо!
Asail (2005-12-19 18:05:00) [1]
> Да эт опять моя невнимательность вследстии не досыпания
> виновата. Для приложения конечно же всё проще Leonid Troyanovsky
> © (19.12.05 16:40) [12]
Да, уж! И мне бы спать побольше не мешало !!!
СПАСИБО! Работает - класс!
Leonid Troyanovsky (2005-12-19 17:57:00) [2]
> Asail (19.12.05 17:00) [13]
> Проверил работает и под XP, но перехватывает все события
> от мыши и клавиатуры, а надо только в моем приложении.
Млин, ну в OnIdle - включаешь таймер, в OnMessage - [12] - выкл.
--
Regards, LVT.
Eraser (2005-12-19 17:56:00) [3]
> Asail (19.12.05 17:00) [13]
Да эт опять моя невнимательность вследстии не досыпания виновата. Для приложения конечно же всё проще Leonid Troyanovsky © (19.12.05 16:40) [12]
Asail (2005-12-19 17:00:00) [4]
> http://kladovka.net.ru/download.cgi?id=195
> DLL, реализующая GetLastInputInfo под win9x.
Проверил работает и под XP, но перехватывает все события от мыши и клавиатуры, а надо только в моем приложении. Пользователь может работать с MS Word, например, а мое приложение, тем временем, должно считаться не активным. К тому-же, просто движение мыши, даже поверх окна моей программы, за активность считать не хотелось-бы.
Может, еще какие варианты есть?
Leonid Troyanovsky (2005-12-19 16:40:00) [5]
> Asail (19.12.05 16:05) [8]
> А как его определить? Ну, допустим, нажатие на кнопки, ввод
> данных в TEdit, прокрутка DBGrid и т.д. и т.п. Ну и что,
> все это обрабатывать?
Application.OnMessage := DoMessageEvent;
procedure TForm1.DoMessageEvent (var Msg: TMsg; var Handled: Boolean);
begin
case Msg.message of
WM_KEYFIRST..WM_KEYLAST,
WM_MOUSEFIRST..WM_MOUSELAST: {keyb/mouse is active now};
end;
end;
--
Regards, LVT.
Eraser (2005-12-19 16:33:00) [6]
> Asail (19.12.05 14:42)
http://kladovka.net.ru/download.cgi?id=195
DLL, реализующая GetLastInputInfo под win9x.
Slym (2005-12-19 16:25:00) [7]Asail (19.12.05 16:05) [8]
Неужто, все так плохо?!!
Расслабься... Все хорошо... Думать вредно...
Leonid Troyanovsky (2005-12-19 16:22:00) [8]
> Slym © (19.12.05 15:24) [6]
> 1. Завести переменную LastInput:Longint;
> 2. На каждое действие юзера делать LastInput:=GetTickCount;
GetLastInputInfo
--
Regards, LVT.
Asail (2005-12-19 16:05:00) [9]
> Понятие "действие юзера" - ты должен определить САМ!
А как его определить? Ну, допустим, нажатие на кнопки, ввод данных в TEdit, прокрутка DBGrid и т.д. и т.п. Ну и что, все это обрабатывать?
Неужто, все так плохо?!!
Slym (2005-12-19 15:25:00) [10]Понятие "действие юзера" - ты должен определить САМ!
Slym (2005-12-19 15:24:00) [11]1. Завести переменную LastInput:Longint;
2. На каждое действие юзера делать LastInput:=GetTickCount;
3. Завести таймер (к примеру) и внем
if (GetTickCount-LastInput)>60000 then ПользовательУшел();
Zeqfreed (2005-12-19 15:23:00) [12]Asail (19.12.05 14:51) [2]
Это время очень мало. Зачем тебе нужна такая величина?
Asail (2005-12-19 15:12:00) [13]
> Это как нет со стороны приложения, а таймер?
Ну, так в этом и проблема! А что делать?
Anatoly Podgoretsky (2005-12-19 15:05:00) [14]Это как нет со стороны приложения, а таймер?
Asail (2005-12-19 14:51:00) [15]Т.е. когда в нет никаких действий с приложением, ни со стороны пользователя, ни со стороны самого приложения.
Slym (2005-12-19 14:46:00) [16]Что такое "время простоя приложения"?