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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2010, 17:01   #1
Manonia
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 77
По умолчанию Определить версию ОС, дату установки и последнего перезапуска

Доброго времени суток! Срочно понадобилось написать программу на Delphi, определяющую версию ОС(с этим я справилась, много инфы), дату установки и дату последнего перезапуска ОС- с последними двумя возникли проблемы. Дату установки я думаю можно решить так: извлечь параметр installDate из реестра Windows(хранится в шестнадцатеричном виде в разделе [HKEY_LOCAL_MACHINE\SOFTWARE\Microso ft\Windows NT\CurrentVersion] в REG_DWORD-параметре InstallDate). Этот параметр InstallDate показывает количество секунд, прошедших с 1 января 1970 г. до момента установки операционной системы. Приплюсовать их к указанной дате и все! Дело только в том, что я в силу малого опыта не могу реализовать это на дельфи.. на счет даты последнего перезапуска такая же проблема.
Manonia вне форума Ответить с цитированием
Старый 22.03.2010, 17:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну например вот код:
Код:
var r:TRegistry;d:TDateTime; w:Integer;
begin
 r:=TRegistry.Create;
  r.RootKey:=HKEY_LOCAL_MACHINE;
  r.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion',false);
  //r.ReadBinaryData('InstallDate',d,sizeof(d));
  d:=r.ReadDate('InstallDate');
  write(DateToStr(d));
 r.Free;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Взял с примера не тестировал. Подправил по твоим параметрам
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.03.2010, 17:32   #3
Manonia
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 77
По умолчанию

Ошибка(см. вложение)... мне кажется все дело в d:=r.ReadDate('InstallDate'); так как InstallDate - это не дата, а кол-во секунд и при том в шестнадцатеричном виде...как исправить?
Изображения
Тип файла: jpg 1.jpg (57.9 Кб, 116 просмотров)
Manonia вне форума Ответить с цитированием
Старый 22.03.2010, 17:43   #4
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

А у меня вообще параметра IntallDate нету... хм

-ДОБАВИЛ-
Сорри, глянул в Windows, а не Windwos NT..
Там просто гляньте дату создания папки Windows и непарте мозни)

-ДОБАВИЛ-
Вот изменил кое-какой листинг и вроде вышло:
Код:
uses
  ShlObj;

function GetWindowsCreateTime: string;
var
  SearchRec: TSearchRec;
  Success: integer;
  DT: TFileTime;
  ST: TSystemTime;
  S: string;
begin
   SetLength(s, MAX_PATH);
   if SHGetSpecialFolderPath(0, PChar(s), $24, true) then begin;
   Success := SysUtils.FindFirst( PChar(s), faDirectory, SearchRec );
   if ( Success = 0 ) and
      ( ( SearchRec.FindData.ftLastAccessTime.dwLowDateTime <> 0 ) or
      ( SearchRec.FindData.ftLastAccessTime.dwHighDateTime <> 0 ) )
   then
   begin
      FileTimeToLocalFileTime( SearchRec.FindData.ftCreationTime, DT );
      FileTimeToSystemTime( DT, ST );
      Result := IntToStr( st.wDay ) + '.' + IntToStr( st.wMonth ) + '.' +
                       IntToStr( st.wYear ) + ' ' + IntToStr( st.wHour ) + ':' +
                       IntToStr( st.wMinute ) + ':' + IntToStr( st.wSecond );
   end;
   SysUtils.FindClose( SearchRec );
   end else Result := '00.00.00 00:00:00';
end;
Функция возвращает дату создания папки Windows...
P.S.: "дату последнего перезапуска ОС" - вы имеете ввиду, сколько компьютер работает после включения или когда компьютер последний раз делал Перезагрузку? Если второе, то не думаю что получеться, а если первое, то пожалуйтса:
Код:
function WorkTimeOS: string;
var
  H, M, S, D: INTEGER;
  DS, HS, MS, SS: string;
begin
  S := GetTickCount div 1000;
  M := Round(INT(S / 60));
  S := S - M * 60; //Seconds
  H := Round(INT(M / 60)); //Hours
  M := M - H * 60; //Minutes
  D := H div 24;
  if D < 10 then
    DS := '0' + Inttostr(D)
  else
    DS := inttostr(D);
  if H < 10 then
    HS := '0' + inttostr(H)
  else
    HS := inttostr(H);
  if M < 10 then
    MS := '0' + inttostr(M)
  else
    MS := inttostr(M);
  if S < 10 then
    SS := '0' + inttostr(S)
  else
    SS := inttostr(S);
  if D > 0 then
    RESULT := DS + ':' + HS + ':' + MS + ':' + SS
  else
    RESULT := HS + ':' + MS + ':' + SS;
end;

Последний раз редактировалось W0LF; 22.03.2010 в 18:31.
W0LF вне форума Ответить с цитированием
Старый 22.03.2010, 18:33   #5
Manonia
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 77
По умолчанию

Спасибо Вам большое!!
Я тоже поковырялась, исправила и получила:

var r:TRegistry;d:integer; w:Integer;
begin
r:=TRegistry.Create;
r.RootKey:=HKEY_LOCAL_MACHINE;
r.OpenKey('\SOFTWARE\Microsoft\Wind ows NT\CurrentVersion',false);
//r.ReadBinaryData('InstallDate',d,si zeof(d));
d:=r.ReadInteger('InstallDate');
label5.Caption :=inttostr(d);
r.Free;

.. получила в десятичной форме кол-во секунд, прошедших с 1 января 1970 года до моей установки ОС.
Сейчас попробую ваш метод и правда может не париться сильно =)
Manonia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить версию браузера IE пользователя? AgentVlad PHP 6 08.10.2009 13:00
посчитать сумму m последнего числа n лялька Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2008 14:12
БД, обнуление данных после перезапуска Жека:) Общие вопросы C/C++ 3 28.11.2008 20:09
Данные сохранить в файл и без перезапуска программы отобразить в grid-e xdevi Помощь студентам 2 29.01.2008 09:17
Как определить полную версию Windows Crazyman Windows 6 27.01.2008 02:19