Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Время простоя компьютера  (Прочитано 13144 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FoxVID
Гость
« : 06-03-2005 10:23 » 

Подскажите пожалуйста, как из программы определить время простоя компьютера, т.е. время, в течение которого пользователь не трогал клавиатуру и не двигал мышкой  :?
« Последнее редактирование: 06-03-2005 10:31 от FoxVID » Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 08-03-2005 15:16 » 

Помню, читал какую-то статью про MFC, там говорилось заодно о сообщении, которое подается когда пользователь, говоря простым языком, не трогает компьютер и приводился пример. Смысл примера, писался обработчик этого сообщения (в MFC это не сложно ), просто вставляллась выдача звукового сигнала MessageBeep и как они писали, даже когда пользователь печатает в ворде, то между нажатеями клавиш будет издаваться сигнал, но  я почему-то не достиг такого результата, писка вообще не было. Я сейчас на вскидку не вспомню обработчик чего советовали в той статье написать, но если заинтересовало могу поискать.
Записан

ещё один вопрос ...
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #2 : 08-03-2005 15:23 » 

Есть WM_MOUSEMOVE и все что свзано с мышкой.
Есть WM_KEYDOWN
Но это только у той программы в которой бежишь...
Как сделать пока не знаю... Надо копать.
Записан

А птичку нашу прошу не обижать!!!
FoxVID
Гость
« Ответ #3 : 09-03-2005 06:45 » 

Я сейчас на вскидку не вспомню обработчик чего советовали в той статье написать, но если заинтересовало могу поискать.
Да, если не трудно, буду очень признателен.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 09-03-2005 11:32 » 

Если быстро - посмотри исходники какого нить скрин сейвера. Сам никогда такого не делал. Тебе на каком языке надо?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
GlukSoft
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 09-03-2005 12:19 » 

Джон, скринсейвер здесь не причем, его запускает система, когда проходит заданное время, т.е. смотреть нужно API'шные функции
« Последнее редактирование: 20-12-2007 17:54 от Алексей1153++ » Записан

Fatal error C1: Brain expected
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 09-03-2005 15:12 » 

Вот вырезка из той статьи о которой я писал до этого.
Цитата
Теперь нам надо добавить код обработки фонового режима для этого нам необходимо связать код с событием OnIdle, которое происходит, когда окно программы не активно.
Для этого откроем Class Wizard выберем класс CFormApp, найдем сообщение OnIdle и добавим функцию, в которую поместим следующий код:
BOOL CTaskApp::OnIdle(LONG lCount)
{
// TODO: Add your specialized code here and/or call the base class

/*Вызвать функцию базового класса СWinApp::OnIdle(), чтобы завершить его служебные задачи*/
CWinApp::OnIdle(lCount);

//Звуковой сигнал
MessageBeep((WORD)-2);

/*Вернуть TRUE, чтобы опять запустить себя, если есть фоновый режим*/
returnTRUE;
}


Первый оператор требуется для нормальной работы программы, мы точно уже уверены, что с системой все в поряке.
Запустите программу, когда ваша система простаивает она выдает непрерывный звуковой сигнал, даже когда вы печатаете в окне редактирования, тоже подается звуковой сигнал, т.к. есть паузы между набором символов.
Но как я писал выше у меня не заработало. Если у тебя получится, то напиши, а то мне тоже че-то интересно стало Ага.
Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 09-03-2005 16:22 » 

Николай, дык я это и имел ввиду.

"когда проходит заданное время" = "время простоя компьютера, т.е. время, в течение которого пользователь не трогал клавиатуру и не двигал мышкой" Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #8 : 09-03-2005 18:08 » new

Джон, ну это примерно как будильник. Система видит, что пользователь спит некоторое время, считает это время. А потом сама запускает Скринсервер. Вопрос чуть по другому поставлен. В любое время, даже когда скринсервер выключен, узнать сколько пользователь гуляет.
Есть одна идея. Но она только для своего потока будет действовать. Есть API функция
Цитата
The GetMessageTime function returns the message time for the last message retrieved by the GetMessage function from the current thread's message queue. The time is a long integer that specifies the elapsed time, in milliseconds, from the time the system was started to the time the message was created (that is, placed in the thread's message queue).

LONG GetMessageTime(VOID)
 

Parameters

This function has no parameters.

Return Values

The return value specifies the message time.

Remarks

The return value from the GetMessageTime function does not necessarily increase between subsequent messages, because the value wraps to zero if the timer count exceeds the maximum value for a long integer.
To calculate time delays between messages, verify that the time of the second message is greater than the time of the first message; then, subtract the time of the first message from the time of the second message.
По ней можно узнать время последнего сообшения взятого из очереди потоком.
Берем время на данный момент, отнимаем время сообшения, и получаем время простоя. Но это будет работать, если только  наше окно было активным. В Пассивном состоянии это будет неактуальным.
« Последнее редактирование: 20-12-2007 17:56 от Алексей1153++ » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines