Показать полную графическую версию : Время работы компьютера
Delirium
01-03-2011, 06:39
Сегодня решил отдохнуть и узнать,сколько времени моя машина включена. Различные методы типа systeminfo и прочее - это скучно :)
Через 15 минут родилось 2 программки -консольная и оконная, единственное из назначение - вывод времени работы компьютера :) Берем из архива файл (1.exe - консольное, 2.exe - оконное), кидаем их в папку \Windows и затем достаточно будет нажать Ctrl+R (Пуск-выполнить) - и вбить туда 1 или 2 :) Файлы можно переименовать, как душе угодно, тогда надо будет вводить созданное вами имя в окне выполнения.
В Windows 7 достаточно просто нажать клавишу Пуск или Win(на клавиатуре) и ввести имя программы.
P.S. Для работы нужен Framework 2.0, т.к. студия не дает компилировать под Net 1.0, а файла csc.exe framework 1.0 у меня в семерке нет.
Если кто захочет, могу дать исходники, перекомпилим и выложим, тогда будет работать у всех без установки фреймворка :)
А реально сделать в реальном времени отсчет?
Delirium
26-05-2011, 01:29
Сделать то все реально :) А цель какова? Можно сделать чтобы в трее висело приложение и при наведении показывало время работы.
Delirium
26-05-2011, 02:11
Маленько обновил программку Win-версии. Теперь ее можно свернуть в трей и при наведении мыши будет показывать время работы. В шапке лежит обновленная версия(uptime_win 1.1.zip)
в версии 1.1 у меня время аптайма определилось, а потом начинает уменьшаться))
а можно сделать, так чтобы отсчет шел постоянно
баг версии 1.1 с уменьшением времени означает, что впрога один раз получила данные о системном аптайме, а далее сама прибавляет (пока, правда, отнимает) единицу каждую секунду.
мне кажется, было бы правильнее, что бы программа просто раз в секунду получала данные о времени аптайма из системы
Delirium
27-05-2011, 01:11
а далее сама прибавляет (пока, правда, отнимает) единицу каждую секунду. »
Это кто вам такое сказал? При каждом наведении мышкой или открытии окна идет получение данных заново, а не прибавление секунд вручную. И я не могу понять, где что не работает, сейчас проверил, и при наведении и при открытии окна постоянно показывает увеличивающееся время. Приведите скрины или опишите подробно проблему.
а можно сделать, так чтобы отсчет шел постоянно »
ПОсмотрю сегодня, если будет время, сделаю.
есть же KB232243 (http://support.microsoft.com/kb/232243/en-us)
KB232243 так может?
свернуть в трей и при наведении мыши будет показывать время работы
ferget, не может, но на мой взгляд, это довольно экзотичная функция:
если требуется реально контролировать uptime - виджет на экран или на рабочий стол обоями выкладывать (BGinfo)
Это кто вам такое сказал? При каждом наведении мышкой или открытии окна идет получение данных заново, а не прибавление секунд вручную. И я не могу понять, где что не работает, сейчас проверил, и при наведении и при открытии окна постоянно показывает увеличивающееся время. Приведите скрины или опишите подробно проблему.
У меня время уменьшается. Win XP SP2 MCE 2005 предустановленная на ноут + руссификация + SP3
Не важно, наводишь мышкой или переоткрываешь окно - время уменьшается.
Выявилась еще одна проблема. Сегодня я заметил, чир во всех версиях вашей программы время оказалось на много меньше, а сначала совпадало с системным аптаймом. При этом systeminfo и NHC - показывают корректно. Первый раз я скачал архив с программой 25 мая в 19:50 и запустил программу, соответственно, позже, и хотя на текущий момент прошло менее 3х суток, разница в показаниях составляет 5 дней, т.е. время уменьшается где-то в два раза быстрее, а значит есть какой-то отдельный счетчик у вашей программы, а не опрос системного времени.
повтор
а можно сделать, так чтобы отсчет шел постоянно
Grabber2006
30-05-2011, 00:11
Какой-то велосипед изобретаете:
1. Ctrl + Alt + Del -> Диспетчер задач -> Быстродействие -> Время работы
2. Утилита от MS uptime.exe (http://support.microsoft.com/kb/232243)
3. В командной строке "net statistics server" (в первой строчке - время включения)
4. В командной строке "systeminfo"
5. На Delphi:
function UpTime: string;
const
ticksperday: Integer = 1000 * 60 * 60 * 24;
ticksperhour: Integer = 1000 * 60 * 60;
ticksperminute: Integer = 1000 * 60;
tickspersecond: Integer = 1000;
var
t: Longword;
d, h, m, s: Integer;
begin
t := GetTickCount;
d := t div ticksperday;
Dec(t, d * ticksperday);
h := t div ticksperhour;
Dec(t, h * ticksperhour);
m := t div ticksperminute;
Dec(t, m * ticksperminute);
s := t div tickspersecond;
Result := 'Uptime: ' + IntToStr(d) + ' Days ' + IntToStr(h) + ' Hours ' + IntToStr(m) +
' Minutes ' + IntToStr(s) + ' Seconds';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := UpTime;
end;
GetTickCount - штатная функция WinAPI - время в миллисекундах прошедшее от старта системы (через 50 дней обнуляется).
Чтобы избежать лимита юзайте GetTickCount64 (соответственно ULONGLONG, а не LongWord).
а можно сделать, так чтобы отсчет шел постоянно »
В Notebook Hardware Control (http://pbus-167.com) это релизовано.
Ctrl + Alt + Del -> Диспетчер задач -> Быстродействие -> Время работы »
Скриншот в студию
http://i019.radikal.ru/1105/06/fc44bdef9a6bt.jpg (http://radikal.ru/F/i019.radikal.ru/1105/06/fc44bdef9a6b.png.html)
ferget, ресурс диспетчера по видимому патченый, по умолчанию в ХР такого нет. Признавайтесь какой украшалкой пользуетесь? :)
Grabber2006
31-05-2011, 16:57
Без украшалок в Win7 так.
Кстати, GetTickCount64 только под Vista, 7, 2008 есть. В XP чтобы нормальное время узнать (если больше 49 дней), то надо через HKEY_PERFORMANCE_DATA\System\System Up Time или NtQuerySystemInformation
Интересно:
NtQuerySystemInformation
заполняет такую структуру:
SYSTEM_TIME_OF_DAY_INFORMATION = packed record
BootTime: LARGE_INTEGER;
CurrentTime: LARGE_INTEGER;
TimeZoneBias: LARGE_INTEGER;
CurrentTimeZoneId: ULONG;
Reserved: ULONG;
end;
которое BootTime - это время загрузки в 100-нс начиная с 1601 года.
SystemTimeOfDayInformation = 3
Delphi:
NtQuerySystemInformation(3, @s,sizeof(SYSTEM_TIME_OF_DAY_INFORMATION),nil);
n:=s.CurrentTime.QuadPart-s.BootTime.QuadPart;
n:=round(n/10000000);//сколько секунд работает система
Label1.Caption := inttostr(n);
Исходники для Lazarus и прога (до 49 дней) (http://www.2shared.com/file/BhuaT3m7/SysUpTime.html)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.