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

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

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

Восстановить пароль
Повторная активизация e-mail

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

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

Доброго времени суток, уважаемые программисты. Суть вопроса такова: Необходимо определить активен ли пользователь в данный момент. В качестве оценивающего критерия активности остановимся на взаимодействие с клавиатурой и мышкой( движение курсора\нажатие клавиш). Пытался искать долгое время в интернете и единственным кодом, что удалось найти был:
Код:
function SecondsIdle: DWord;
var
   liInfo: TLastInputInfo;
begin
   liInfo.cbSize := SizeOf(TLastInputInfo) ;
   GetLastInputInfo(liInfo) ;
   Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;
Использую Delphi 7, ОС - Win8.1 x64.
Суть проблемы в том что даже если я не трогаю мышку и клавиатуру таймер показывает что система активна. Немного постаравшись получилось примерно следующее что и демонстрирует работу функции:
Изображения
Тип файла: jpg Безымянный.jpg (46.5 Кб, 160 просмотров)

Последний раз редактировалось Stilet; 27.03.2015 в 15:49.
AngelNine вне форума Ответить с цитированием
Старый 27.03.2015, 15:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
However, GetLastInputInfo does not provide system-wide user input information across all running sessions. Rather, GetLastInputInfo provides session-specific user input information for only the session that invoked the function.
Т.е. ты мониторишь только события простоя своего приложения а не всецело системы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.03.2015, 16:11   #3
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Код:
function SecondsIdle: DWord;
var
   liInfo: TLastInputInfo;
begin
   liInfo.cbSize := SizeOf(TLastInputInfo) ;
   GetLastInputInfo(liInfo) ;
   Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Label1.Caption := IntToStr (SecondsIdle);
end;
Delphi XE5
Windows 7 32-bit
Работает
Sibedir вне форума Ответить с цитированием
Старый 27.03.2015, 16:19   #4
AngelNine
Пользователь
 
Регистрация: 27.03.2015
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Т.е. ты мониторишь только события простоя своего приложения а не всецело системы.
Простите мне мою не грамотность и не знание английского языка... Но тогда может вы мне подскажите как мне мониторить простой всей системы? Или как отследить движение мышки и нажатие клавиатуры, в то время когда мое приложение не активно, т.е. не в фокусе?
AngelNine вне форума Ответить с цитированием
Старый 27.03.2015, 16:23   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Hook'и использовать.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.03.2015, 16:24   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну в общем-то можно поставить хук. Что-то типа http://delphiworld.narod.ru/base/glo...oard_hook.html
Но просто само понятие "простоя" слишком абстрактное. Может расскажешь для чего это вообще нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.03.2015, 16:40   #7
AngelNine
Пользователь
 
Регистрация: 27.03.2015
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Код:
function SecondsIdle: DWord;
var
   liInfo: TLastInputInfo;
begin
   liInfo.cbSize := SizeOf(TLastInputInfo) ;
   GetLastInputInfo(liInfo) ;
   Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Label1.Caption := IntToStr (SecondsIdle);
end;
Delphi XE5
Windows 7 32-bit
Работает
И у вас он корректно показывает время простоя приложения?

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну в общем-то можно поставить хук. Что-то типа http://delphiworld.narod.ru/base/glo...oard_hook.html
Но просто само понятие "простоя" слишком абстрактное. Может расскажешь для чего это вообще нужно?
Приложение отслеживает время работы сотрудников. Какие приложения запущены. Время активности в той или иной программы. Но так же мне нужно для этого как то отследить активен ли пользователь или он куда то отошел. Есть программка WorkExamener мне нужен аналог.

Последний раз редактировалось Stilet; 27.03.2015 в 16:49.
AngelNine вне форума Ответить с цитированием
Старый 27.03.2015, 17:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Приложение отслеживает время работы сотрудников.
А род работы сотрудников? Вдруг они не все время проводят за терминалом?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.03.2015, 17:19   #9
AngelNine
Пользователь
 
Регистрация: 27.03.2015
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А род работы сотрудников? Вдруг они не все время проводят за терминалом?
Это уже не важно, меня интересует именно время проведенное за терминалом. Сколько времени компьютер был в активном состоянии (пользователь работал с какими либо приложениями) и сколько он стоял без участия пользователя. Это и так понятно что они не все время проводят на рабочем месте. Вот по факту мне и нужно отследить сколько времени они отсутствуют на рабочем месте...
AngelNine вне форума Ответить с цитированием
Старый 27.03.2015, 17:25   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Вот по факту мне и нужно отследить сколько времени они отсутствуют на рабочем месте...
А если он у компа, но не трогает клавиатуру?

К примеру читающий документы юрист может вообще ничего не нажимать, поставив документ в режим автоскроллирования.
Или человек рассматривает презентацию, или принимает видеоконференцию от шефа — как тогда?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение активности приложения и совершаются ли в нём действия. dima1257 C# (си шарп) 2 03.06.2014 07:57
Определение имени пользователя -Jack- Общие вопросы Delphi 17 23.08.2013 01:09
Протоколирование активности пользователя XPAiN Общие вопросы Delphi 4 17.04.2009 09:22
Определение неактивности пользователя Квэнди Общие вопросы Delphi 3 26.09.2007 19:24