Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2011, 15:59   #1
Geksod
Пользователь
 
Регистрация: 27.08.2011
Сообщений: 10
По умолчанию Как определить активность пользователя?

Как определить активность пользователя за компьютером: нажимаются любые кнопки клавиатуры, перемещается мышь.
В моей программе по таймеру вырубается питание монитора (что-то типа хранителя экрана).
Необходимо, чтобы во время активности пользователя (выполнения других программ), таймер был неактивным. Нашел код, но никак не могу приспособить для своих нужд:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.OnMessage := DoMessageEvent;
end;

procedure TForm1.DoMessageEvent(var Msg: TMsg; var Handled: Boolean);
begin
   case Msg.message of
      WM_KEYFIRST..WM_KEYLAST, WM_MOUSEFIRST..WM_MOUSELAST:
      begin
         // Произошло событие клавиатуры или мыши,
         // делаем все, что нам надо
      end;
  end;
end;
Забыл добавить: программа свернута в системный трей.

Последний раз редактировалось Geksod; 27.08.2011 в 16:09.
Geksod вне форума Ответить с цитированием
Старый 27.08.2011, 16:50   #2
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
программа свернута в системный трей
ну тогда твой код не катит
fate вне форума Ответить с цитированием
Старый 27.08.2011, 16:55   #3
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Наверное, нужна глобальная обработка, хук. Я думаю знающие люди подскажут, и зачем только я вставляю свои 5 копеек
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 27.08.2011, 17:06   #4
Geksod
Пользователь
 
Регистрация: 27.08.2011
Сообщений: 10
По умолчанию

Поделитесь кодом, если есть у кого-то что-то похожее...
Geksod вне форума Ответить с цитированием
Старый 27.08.2011, 17:09   #5
Geksod
Пользователь
 
Регистрация: 27.08.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от chertovich Посмотреть сообщение
Наверное, нужна глобальная обработка, хук. Я думаю знающие люди подскажут, и зачем только я вставляю свои 5 копеек
Я тоже думаю, что необходим хук. Нашел много инфы на эту тему. Сижу читаю. Просто думал может у кого есть готовое решение.
Geksod вне форума Ответить с цитированием
Старый 27.08.2011, 17:33   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а может стоит посмотреть в эту сторону?
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.08.2011, 18:23   #7
Geksod
Пользователь
 
Регистрация: 27.08.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а может стоит посмотреть в эту сторону?
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Часто на форумах отвечают ссылками с msdn.
Научите применять это дело на практике, пожалуйста. Как можно подробнее. Если не затруднит.
Geksod вне форума Ответить с цитированием
Старый 27.08.2011, 18:37   #8
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Подмигивание

Пример во вложении
Вложения
Тип файла: rar idle_Monitor.rar (159.4 Кб, 80 просмотров)
Lime вне форума Ответить с цитированием
Старый 27.08.2011, 19:02   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

прошу прощения, не то сказал.
вот пример получения количества миллисекунд простоя:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var times:tagLASTINPUTINFO;
begin
 times.cbSize:=SizeOf(times);
 GetLastInputInfo(times);
 Memo1.Text:=(IntToStr(GetTickCount()-times.dwTime));
end;
вот собственно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поднять активность использования HDD? Flipper Общие вопросы C/C++ 0 28.08.2010 13:35
Как узнать активность приложения ? keef Помощь студентам 6 19.12.2009 23:11
Как узнать ip пользователя _PROGRAMM_ PHP 3 25.10.2009 01:27
Как определить версию браузера IE пользователя? AgentVlad PHP 6 08.10.2009 13:00
Как проверить активность IP в заданом диапазоне SeRhy Работа с сетью в Delphi 2 17.03.2009 23:59