Узнать аптайм

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Узнать аптайм

Сообщение Proxy » 15.11.2011 (Вт) 21:03

Не лезет в голову как узнать аптайм на произвольном ПК под Windows XP (Vista/7) с учётом использования гибернации или сна. Т.е. если пк был запущен в 20:00, затем перешёл в гибернацию с 21:00 по 22:00 и затем вышел из гибернации и работал до 23:00, суммарно это 2 часа аптайм. Есть какой-то счётчик, с которым можно работать через API не используя избыточный код или же нужно самому реализовать? Появилась необходимость для кое-какой статистики.
ЗЫ. Что-то я совсем отошёл от дел. Нету мозгов, видать посеял где-то :(
Follow the white rabbit.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Узнать аптайм

Сообщение Хакер » 15.11.2011 (Вт) 22:06

А почему в трепе, а не в соответствующем разделе?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Узнать аптайм

Сообщение Admiralisimys » 15.11.2011 (Вт) 22:09

Proxy в ХР появилась консольная комманда systeminfo которая помимо прочего выводит информацыю об Ап тайме. Не проверял, с учётом ли сна/гибернации. Гибернация точно регестрируется в системном журнале.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Узнать аптайм

Сообщение Proxy » 15.11.2011 (Вт) 23:27

Хакер писал(а):А почему в трепе, а не в соответствующем разделе?

Сразу не нашёл подходящего раздела, к сожалению. Можешь переместить в "Платформы - Windows".
Admiralisimys писал(а):Proxy в ХР появилась консольная комманда systeminfo которая помимо прочего выводит информацыю об Ап тайме.

Там вроде нет аптайма, там только дата/время последней загрузки ОС (во всяком случае у меня так, почему-то).
Follow the white rabbit.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Узнать аптайм

Сообщение Хакер » 15.11.2011 (Вт) 23:37

Proxy писал(а):Там вроде нет аптайма, там только дата/время последней загрузки ОС (во всяком случае у меня так, почему-то).
systeminfo_uptime.png
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Узнать аптайм

Сообщение iGrok » 16.11.2011 (Ср) 0:08

Авотфиг:
Изображение

З.Ы. В то же время, на XP systeminfo выдало строчку с временем работы.
Вот только фактически нет разницы между этими двумя цифрами, т.к. это "время работы" считается без учёта гибернаций, т.е. тупо берётся разница между текущим и "последней загрузкой системы".
label:
cli
jmp label

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Узнать аптайм

Сообщение Dmitriy2003 » 18.11.2011 (Пт) 16:12

Proxy писал(а):Не лезет в голову как узнать аптайм на произвольном ПК под Windows XP (Vista/7) с учётом использования гибернации или сна.


Ну например так (тестировалось тока для 7 ), для XP или Vista влом.
Powershell script, если очень хочется можно доработать оптимизировать и.т.д - и.т.п, мне влом.

Код: Выделить всё
$OS = gwmi Win32_OperatingSystem

[DateTime]$LBDT = [DateTime]($OS.ConvertToDateTime($OS.LastBootUpTime))
[TimeSpan]$BUPT=[DateTime]::Now - [DateTime]($OS.ConvertToDateTime($OS.LastBootUpTime))

$LBDTParam = [String]::Format("{0}-{1}-{2}T{3}:{4}:{5}:{6}Z",`
    $LBDT.Year, $LBDT.Month, $LBDT.Day, $LBDT.Hour, $LBDT.Minute, $LBDT.Second, $LBDT.Millisecond)
   
$query = $query = "*[System[TimeCreated[@SystemTime >= '"+ $LBDTParam + "'] and EventID=300]]"

[XML]$evXML = wevtutil qe Microsoft-Windows-Diagnostics-Performance/Operational /q:$query /f:XML

[TimeSpan]$SBT = [TimeSpan]::FromMilliseconds(($evXML.Event.EventData.Data | `
    Where-Object {$_.Name -eq "StandbySuspendTotal"} | Select-Object -Property '#text').'#text')

[TimeSpan]$UPT = $BUPT - $SBT

"BootTime: " +  $LBDT.ToString()
"Event creation condition: " + $LBDTParam
"BootUpTime: " + $BUPT.ToString()
"StandByTime: " + $SBT.ToString()

[String]::Format("Total OS UpTime: {0} Days, {1} Hours, {2} Minutes, {3} Secons", `
    $UPT.Days,$UPT.Hours,$UPT.Minutes, $UPT.Seconds)


Вывод скрипта:
Код: Выделить всё
# BootTime: 18.11.2011 11:54:40
# Event creation condition: 2011-11-18T11:54:40:866Z
# BootUpTime: 02:08:02.8894921
# StandByTime: 00:00:03.3970000
# Total OS UpTime: 0 Days, 2 Hours, 7 Minutes, 59 Secons

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Узнать аптайм

Сообщение Proxy » 18.11.2011 (Пт) 19:16

Вопрос не в реализации (хотя за пример спасибо), а в том, не будет ли это дублированием системного функционала? Кажется в системе где-то должен быть готовый счётчик.
Follow the white rabbit.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Узнать аптайм

Сообщение FireFenix » 18.11.2011 (Пт) 20:05

Обычный GetTickCount не подходит?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Узнать аптайм

Сообщение Хакер » 18.11.2011 (Пт) 21:16

FireFenix писал(а):Обычный GetTickCount не подходит?

Он переполняется.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Узнать аптайм

Сообщение FireFenix » 18.11.2011 (Пт) 23:55

Хакер писал(а):
FireFenix писал(а):Обычный GetTickCount не подходит?

Он переполняется.

Ну это не значит, что он не подходит.... может надо меньше 47 дней :)
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Узнать аптайм

Сообщение Хакер » 18.11.2011 (Пт) 23:56

Ещё у него очень низкая точность.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Узнать аптайм

Сообщение Proxy » 19.11.2011 (Сб) 9:04

Хакер писал(а):у него очень низкая точность.

С чем связано? Непредсказуемое обновление?
Follow the white rabbit.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Узнать аптайм

Сообщение Хакер » 19.11.2011 (Сб) 16:48

http://www.insidepro.com/kk/030/030r.shtml
Читать секцию «Разность таймеров»
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Узнать аптайм

Сообщение Proxy » 19.11.2011 (Сб) 17:37

Стало быть за неимением лучшего сгодится и этот. Потом можно придумать периодическую оценку отставания/опережения иных таймеров и коррекцию результатов, но думаю для регулярных подсчётов это самый удобный вариант по ряду причин.
И да, я верно понимаю, что по истечении 47 дней он просто обнуляется и ничего такого страшного не происходит?
Follow the white rabbit.


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron