![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Springtime |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 25.10.2006 Где: Россия, Тюмень Репутация: 0 Всего: 2 |
Всем привет.
Помогите пожалуйста решить мега-задачу. в общем делаю прогу которая должна собирать время работы с окном в винде. То есть сколько пользователь работает в том или ином окне и скидывает данные на SQL. сама функция -
возвращает структуру
проблема в том что никак не могу допереть как её организовать, то есть как сделать что бы она вычисляла время работы с окном и данные скидывала сразу же после смены окна (как скидывала это понятно). У нас есть начальное время, это хорошо, но как вычислить время конечно время, причём это время мы не должны браться из начального времени нового окна. Заранее спасибо. --------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2 |
||||
|
|||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
есть структура TimeSpan которая хранит интервал времени, т.е. не начало и конец, а сколько прошло. обрабатываешь событие окна в начале когда окно получает фокус, в конце когда окно фокус теряет, вычитаешь первое из последнего и разницу записываешь. в базу записываешь тоже по событию потери фокуса окном.
про TimeSpan |
|||
|
||||
| Springtime |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 25.10.2006 Где: Россия, Тюмень Репутация: 0 Всего: 2 |
Не совсем то что нужно. Про TimeSpan знаю. Извиняюсь что не совсем прозрачно рассказал.
Конечное время не должно браться из начального времени нового окна. Т.к. есть перерывы на обед. В общем вот полностью примерный код. Очень прошу помочь.
Это сообщение отредактировал(а) Springtime - 12.7.2009, 14:21 --------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2 |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Мне задача не до конца ясна. Если надо именно время работы за окном, то надо ловить ивенты нажатия/движения мыши и проверять активно ли окно. Если да, то все еще считаем время. Тогда мне не понятно в чем трудность? Наверное, я что-то упустил.
А что есть конец использования окна? -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
Springtime, повторюсь, у формы есть события Focus, так вот засекаем первое время когда Form1_Activated(когда окно попадает в фокус), второе время засекаем когда Form1_Deactivate(т.е. когда окно теряет фокус, это будет происходить всегда когда пользователь будет кликать мышкой(или переключаться иными способами)на других окошках, рабочем столе и т.п.) потом вычитаем из второго времени первое и получаем цифру равную количеству времени, когда окно было активно(т.е. было в фокусе). никаких
тут не будет, все привязывается к одному окну. в результате получаем TimeSpan который и записываем в базу. Это сообщение отредактировал(а) Экскалупатор - 13.7.2009, 20:03 |
|||
|
||||
| Springtime |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 25.10.2006 Где: Россия, Тюмень Репутация: 0 Всего: 2 |
время завершения работы с окном - есть время начала с работы новым окном Экскалупатор мне время работы с окном (TimeSpan) не нужно, мне необходимо время начала работы с ним и время завершения работы с ним. То есть время завершения отсчитывается пока не сменился хендл у окна. В нынешнем варианте время завершения работы с окном - есть время начала с работы новым окном (с новым хендлом). Но проблема в том что есть обеды, во время начала которого мы должны прерывать время работы с окном. То есть допустим окно активировано в 12:50, обед у нас c 13:00-14:00. Функция опрашивает раз в секунду, не сменилось ли окно, если сменилось то отправляем данные. Идёт проверка не наступил ли по времени 13 (время обеда). Если наступило, то опрос больше не происходит. Следующее начало опроса в 14. Но у нас тогда выходит что время начала с окном 12:50 (далее наступает пауза с 13 до 14) и если пользователь сменил окно во время обеда, то время завершения работы с окном 14:00. А надо что бы время завершения было 12:59.
Это сообщение отредактировал(а) Springtime - 14.7.2009, 07:35 --------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2 |
||||
|
|||||
| neutrino |
|
||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Хорошо. Предложение Экскалупатора думаю подходит. Единственное, с обедом можно поступить 2-мя способами: 1) в 13:00, если есть открытое окно: - все делается как будто работа с окном прекращается (может даже окно закрывается). - в 14:00 все делается как будто работа с окном начинается (можно открыть окно) То есть с 13:00 до 14:00 активность пользователя не фиксируется. 2) Если в период обеда пользователь все же проявлял активность, то относится к этому как будто обеда не было. У меня такое ощущение, что не только я не понимаю задачу, но и ты тоже. Можешь привести здесь use case со сценарием включающем, скажем 3 окна и с обедом. Пользователь переключает окна, закрывает их, открывает и т.д. Думаю из примера сразу станет ясно что где и почем. -------------------- The truth comes from within ... Покойся с миром, Vit |
||||
|
|||||
| Экскалупатор |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
так разве я не это предложил?
не надо TimeSpan так не высчитывайте его. у вас есть событие начала работы с окном(Form1_Activated) и событие окончания работы с окном(Form1_Deactivate) пишите в обработчике что то типа
и будет вам счастье |
||||||
|
|||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |