Время старта и завершения работы системы

Время старта и завершения работы системы

Вот так можно узнать дату/время загрузки или завершения работы системы (т.е. когда компьютер был выключен или перезагружен последний раз):

unit Unit1;

{©Drkb v.3(2007): www.drkb.ru}

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls;

type

 TForm1 = class(TForm)

  Label1: TLabel;

  Label2: TLabel;

  procedure FormCreate(Sender: TObject);

 private

  { Private declarations }

 public

  { Public declarations }

 end;

var

 Form1: TForm1;

implementation

uses Registry;

{$R *.dfm}



type

 SYSTEM_TIME_OF_DAY_INFORMATION = record

  BootTime: LARGE_INTEGER;

  CurrentTime: LARGE_INTEGER;

  TimeZoneBias: LARGE_INTEGER;

  CurrentTimeZoneId: ULONG;

 end;

 PSYSTEM_TIME_OF_DAY_INFORMATION = ^SYSTEM_TIME_OF_DAY_INFORMATION;

 NTSTATUS = DWORD;

const

 SystemTimeOfDayInformation =3;

function NtQuerySystemInformation(SystemInformationClass:byte;

  SystemInformation: Pointer;

  SystemInformationLength: ULONG;

  ReturnLength: PULONG): NTSTATUS; stdcall; external 'NTDLL.DLL';



function SysDateToStr(ST : TSystemTime) : string;

const

 sDateFmt = 'dddd, d MMMM, yyyy';

begin

 SetLength(Result, 255);

 GetDateFormat(LOCALE_USER_DEFAULT, 0, @ST, sDateFmt, @result[1], 255);

 SetLength(Result, LStrLen(@result[1]));

end;

function SysTimeToStr(ST : TSystemTime):string;

const

 sTimeFmt = 'HH:mm:ss' ;

begin

 SetLength(result,15);

 GetTimeFormat(LOCALE_USER_DEFAULT,0,@st,sTimeFmt,@result[1],15);

 SetLength(result, StrLen(@result[1]));

end;

function GetFileTimeToSystemTime(ft:TFileTime):string;

var

 st,lt:TSystemTime;

 tz:TTimezoneInformation;

begin

 Result:='';

 if not FileTimeToSystemTime(ft, st) then exit;

 GetTimeZoneInformation(tz);

 SystemTimeToTzSpecificLocalTime(@tz,st,lt);

 Result:=SysDateToStr(lt)+' at ' + SysTimeToStr(lt);

end;

// дата/время последнего выключения (или перезагрузки) системы

function GetLastSystemShutdown:string;

var

 ft:TFileTime;

 reg:TRegistry;

begin

 Result:='';

 reg:=TRegistry.Create;

 try

 reg.RootKey:=HKEY_LOCAL_MACHINE;

 if (not reg.OpenKeyReadOnly('System\CurrentControlSet\Control\Windows')) then exit;

 if (reg.ReadBinaryData('ShutdownTime',ft,sizeof(ft))=0) then exit

 finally

 reg.Free

 end;

 Result:= GetFileTimeToSystemTime(ft)

end;

// дата/время старта системы

function NtGetBootDateTime:string;

var

 sti : SYSTEM_TIME_OF_DAY_INFORMATION;

 status : NTSTATUS;

 ftSystemBoot: FILETIME;

 ST:TSystemTime;

begin

 Result:='';

 status:=NtQuerySystemInformation(SystemTimeOfDayInformation, @sti,

  sizeof(SYSTEM_TIME_OF_DAY_INFORMATION),nil);

 if (status<>NO_ERROR) then exit;

 ftSystemBoot := PFILETIME(@(sti.BootTime))^;

 if FileTimeToLocalFileTime(ftSystemBoot,ftSystemBoot) then

 if FileTimeToSystemTime(ftSystemBoot,ST) then

 Result:=SysDateToStr(ST)+' at '+SysTimeToStr(ST)

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 Label1.Caption:='System start: '+NtGetBootDateTime;

 label2.Caption:='Last system shutdown: '+GetLastSystemShutdown;

end;

end.

PS: работает только в NT и выше.
Взято из http://forum.sources.ru
Автор: Krid

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...