Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326

Определить время простоя системы на 64 битной системе

31.07.2014, 23:33. Показов 3840. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Знаю, щас будете перенаправлять меня на поиск и другие темы, но ситуация немного специфическая.
Имею следующую функцию:
Delphi
1
2
3
4
5
6
7
8
function LastInput: DWord;
var
  LInput: TLastInputInfo;
begin                  //Kernel32.lib
  LInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LInput);
  Result := (GetTickCount - LInput.dwTime) div 1000;
end;
Она отлично работает на 32битной винде и в итоге возвращает время простоя системы в секундах. Но у меня 64 битная система и я безуспешно пытаюсь заставить функцию работать, может кто-то подскажет? уже не знаю что попробовать... GetTickCount вроде корректно рботает, значит косячит GetLastInputInfo, а её 64 битного аналога я не могу найти...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2014, 23:33
Ответы с готовыми решениями:

Создание 64-битной программы на 32-битной системе: возможно ли?
Здравствуйте. Я хотела бы разрабатывать 64-битные приложение в Delphi XE, но у меня в распоряжении есть только 32-битная система. Возможно...

Компиляция и сборка из 64-битной системы для 32-битной системы
Скажите, как скомпилировать и собрать приложение из 64 битной системы, что бы оно работало в 32 битной системе? Возможно ли это и если да,...

Запуск 32-битной программы на 64-битной системе
Подскажите создал простую программу Console.WriteLine("Олололо"); Console.ReadKey(); И почему в процессах пишет name.exe*32? Как...

4
Эксперт Pascal/Delphi
 Аватар для droider
4889 / 2823 / 865
Регистрация: 04.10.2012
Сообщений: 10,268
31.07.2014, 23:40
WestSide072, это не?
0
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
01.08.2014, 00:32  [ТС]
Оно работает только под 32 битной виндой... В случае же 64 - GetTickCount=LastInput.dwTime и в итоге результат = 0.

Добавлено через 41 минуту
Не знаю правильно ли я перевел, но MSDN, вроде, отправляет юзать CallNtPowerInformation, для заполнения структуры SYSTEM_POWER_INFORMATION, и от туда брать TimeRemaining, который обновляется каждые 15 секунд на Windows 7.

There's one simpler way to retrieve system-wide activity on Windows Vista and later OS though. You'll get a "very clunky" output, but it will work system-wide. Call CallNtPowerInformation with SystemPowerInformation and examine the TimeRemaining member of the SYSTEM_POWER_INFORMATION struct. This value will be updated every "now-and-then" if there's no system-wide user activity. The question that I struggled with, is "how often is 'now-and-then'?" The answer doesn't seem to be as straightforward as it seems. It depends on the OS. For Vista it is done every 10 seconds or so, for Windows 7 - every 15 sec, and for Windows 8 - every 30 seconds. For Windows XP though, it is updated ONLY if the "Put computer to sleep" setting in the Power Options in Control Panel is set to something other than "Never". So I would not use it on XP.
На фоне этого нагуглил следующее
CallNtPowerInformation - http://msdn.microsoft.com/en-u... s.85).aspx
Сама структура - http://msdn.microsoft.com/en-u... s.85).aspx

и собрал следующее
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
type
  ASYSTEM_POWER_INFORMATION =record
   MaxIdlenessAllowed: ULONG;
   Idleness:ULONG;
   TimeRemaining:ULONG;
   CoolingMode:UCHAR;
end;
 
function CallNtPowerInformation(
   InformationLevel : Byte;
   lpInputBuffer : Pointer;
   nInputBufferSize : Longint;
   lpOutputBuffer : Pointer;
   nOutputBufferSize : Longint
) : Byte; stdcall;external 'PowrProf.dll';
 
var
  t : ASYSTEM_POWER_INFORMATION;
  i:integer; 
begin
  i:=0;
  while True do
  begin
    Inc(i);
    Writeln('---------------- ',IntToStr(i),'sec ----------------');
  CallNtPowerInformation(12, nil, 0, @t, SizeOf(ASYSTEM_POWER_INFORMATION));
  WriteLn('MaxIdlenessAllowed ',t.MaxIdlenessAllowed);
  WriteLn('Idleness ',t.Idleness);
  WriteLn('TimeRemaining ',t.TimeRemaining);
  WriteLn('CoolingMode ',t.CoolingMode);
    sleep(1000);
  end;
Результат вывода во вложениях.
Кстати забавно наблюдать на параметр Idleness, он, как я понял, отвечает за %% бездействия процессоров, аналог "Бездействие системы" в диспетчере задач.
Миниатюры
Определить время простоя системы на 64 битной системе  
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.08.2014, 01:33
Цитата Сообщение от WestSide072 Посмотреть сообщение
Но у меня 64 битная система и я безуспешно пытаюсь заставить функцию работать, может кто-то подскажет?
И GetTickCount, и GetLastInputInfo вполне себе работают на 64-битных версиях Windows.
Иначе на соответствующей странице MSDN была бы врезка с комментарием.
0
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
01.08.2014, 14:37  [ТС]
Почему GetLastInputInfo равен GetTickCount? Т.е GetLastInputInfo возвращает время с запуска системы, а не с последнего действия в системе

Добавлено через 21 минуту
Значит что-то в системе делает эмитацию активности пользователя? Как узнать что?..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2014, 14:37
Помогаю со студенческими работами здесь

Определить время простоя компьютера
Воникла проблемка, надо узнать время простоя компьютера. Как это узнает Windows/ Поигрался методом static extern bool...

Определить время простоя станка
Всем привет! В задаче имеется входной конвеер, робот, многоканальное устройство и выходной конвеер. Все они расположены...

Определить время простоя приложения и перезапустить его
Здравствуйте,форумчане. Такая задача: нужно чтобы при запуске программы запускался таймер, который обнуляется при свершении каких-либо...

Суммарное время ожидания покупателей (общее время простоя в очереди) в магазине
Задача: Время между последовательными прибытиями покупателей в магазин равномерно распределяется на интервале от 1 до 20 минут. Для 50%...

Программа 16/32 в 64 битной системе
Здравствуйте, друзья. Такая вот проблема. Есть несколько приложений, которые не хотят ставиться(инсталятор) и запускаться именно в х64. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru