PDA

Показать полную графическую версию : Время работы компьютера


Страниц : [1] 2

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 у меня в семерке нет.
Если кто захочет, могу дать исходники, перекомпилим и выложим, тогда будет работать у всех без установки фреймворка :)

nixuz
25-05-2011, 19:53
А реально сделать в реальном времени отсчет?

Delirium
26-05-2011, 01:29
Сделать то все реально :) А цель какова? Можно сделать чтобы в трее висело приложение и при наведении показывало время работы.

Delirium
26-05-2011, 02:11
Маленько обновил программку Win-версии. Теперь ее можно свернуть в трей и при наведении мыши будет показывать время работы. В шапке лежит обновленная версия(uptime_win 1.1.zip)

nixuz
26-05-2011, 07:22
в версии 1.1 у меня время аптайма определилось, а потом начинает уменьшаться))

ferget
26-05-2011, 08:07
а можно сделать, так чтобы отсчет шел постоянно

nixuz
26-05-2011, 20:08
баг версии 1.1 с уменьшением времени означает, что впрога один раз получила данные о системном аптайме, а далее сама прибавляет (пока, правда, отнимает) единицу каждую секунду.

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

Delirium
27-05-2011, 01:11
а далее сама прибавляет (пока, правда, отнимает) единицу каждую секунду. »
Это кто вам такое сказал? При каждом наведении мышкой или открытии окна идет получение данных заново, а не прибавление секунд вручную. И я не могу понять, где что не работает, сейчас проверил, и при наведении и при открытии окна постоянно показывает увеличивающееся время. Приведите скрины или опишите подробно проблему.

а можно сделать, так чтобы отсчет шел постоянно »
ПОсмотрю сегодня, если будет время, сделаю.

Busla
27-05-2011, 10:20
есть же KB232243 (http://support.microsoft.com/kb/232243/en-us)

ferget
27-05-2011, 10:28
KB232243 так может?
свернуть в трей и при наведении мыши будет показывать время работы

Busla
27-05-2011, 13:28
ferget, не может, но на мой взгляд, это довольно экзотичная функция:
если требуется реально контролировать uptime - виджет на экран или на рабочий стол обоями выкладывать (BGinfo)

nixuz
28-05-2011, 11:23
Это кто вам такое сказал? При каждом наведении мышкой или открытии окна идет получение данных заново, а не прибавление секунд вручную. И я не могу понять, где что не работает, сейчас проверил, и при наведении и при открытии окна постоянно показывает увеличивающееся время. Приведите скрины или опишите подробно проблему.

У меня время уменьшается. Win XP SP2 MCE 2005 предустановленная на ноут + руссификация + SP3

Не важно, наводишь мышкой или переоткрываешь окно - время уменьшается.

nixuz
28-05-2011, 11:30
Выявилась еще одна проблема. Сегодня я заметил, чир во всех версиях вашей программы время оказалось на много меньше, а сначала совпадало с системным аптаймом. При этом systeminfo и NHC - показывают корректно. Первый раз я скачал архив с программой 25 мая в 19:50 и запустил программу, соответственно, позже, и хотя на текущий момент прошло менее 3х суток, разница в показаниях составляет 5 дней, т.е. время уменьшается где-то в два раза быстрее, а значит есть какой-то отдельный счетчик у вашей программы, а не опрос системного времени.

ferget
29-05-2011, 23:13
повтор
а можно сделать, так чтобы отсчет шел постоянно

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).

nixuz
31-05-2011, 01:30
а можно сделать, так чтобы отсчет шел постоянно »
В Notebook Hardware Control (http://pbus-167.com) это релизовано.

nixuz
31-05-2011, 10:02
Ctrl + Alt + Del -> Диспетчер задач -> Быстродействие -> Время работы »
Скриншот в студию

ferget
31-05-2011, 10:33
http://i019.radikal.ru/1105/06/fc44bdef9a6bt.jpg (http://radikal.ru/F/i019.radikal.ru/1105/06/fc44bdef9a6b.png.html)

Drongo
31-05-2011, 14:05
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