Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.206.169] |
|
Сообщ.
#1
,
|
|
|
Вот так можно узнать дату/время загрузки или завершения работы системы (т.е. когда компьютер был выключен или перезагружен последний раз):
unit Unit1; 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, MAX_PATH); 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,MAX_PATH); GetTimeFormat(LOCALE_USER_DEFAULT,0,@st,sTimeFmt,@result[1],15); SetLength(result, lstrlen(@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 и выше. Автор: Krid |