<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=115136&amp;view=findpost&amp;p=860041</guid>
        <pubDate>Sun, 18 Sep 2005 17:37:06 +0000</pubDate>
        <title>Время старта и завершения работы системы</title>
        <link>https://forum.sources.ru/index.php?showtopic=115136&amp;view=findpost&amp;p=860041</link>
        <description><![CDATA[Krid: Вот так можно узнать дату/время загрузки или завершения работы системы (т.е. когда компьютер был выключен или перезагружен последний раз):<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label2: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">uses Registry;</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;SYSTEM_TIME_OF_DAY_INFORMATION = record</div><div class="code_line">&nbsp;&nbsp; &nbsp;BootTime: LARGE_INTEGER;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CurrentTime: LARGE_INTEGER;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TimeZoneBias: LARGE_INTEGER;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CurrentTimeZoneId: ULONG;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;PSYSTEM_TIME_OF_DAY_INFORMATION = ^SYSTEM_TIME_OF_DAY_INFORMATION;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;NTSTATUS = DWORD;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;SystemTimeOfDayInformation =3;</div><div class="code_line">&nbsp;</div><div class="code_line">function NtQuerySystemInformation(SystemInformationClass:byte; SystemInformation: Pointer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SystemInformationLength: ULONG;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ReturnLength: PULONG): NTSTATUS; stdcall; external &#39;NTDLL.DLL&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">function SysDateToStr(ST : TSystemTime):string;</div><div class="code_line">const</div><div class="code_line">&nbsp;sDateFmt = &#39;dddd, d MMMM, yyyy&#39;;</div><div class="code_line">begin</div><div class="code_line">&nbsp;SetLength(Result, MAX_PATH);</div><div class="code_line">&nbsp;GetDateFormat(LOCALE_USER_DEFAULT, 0, @ST, sDateFmt, @result[1], 255);</div><div class="code_line">&nbsp;SetLength(Result, lstrlen(@result[1]));</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function SysTimeToStr(ST : TSystemTime):string;</div><div class="code_line">const</div><div class="code_line">&nbsp;sTimeFmt = &#39;HH:mm:ss&#39;;</div><div class="code_line">begin</div><div class="code_line">&nbsp;SetLength(result,MAX_PATH);</div><div class="code_line">&nbsp;GetTimeFormat(LOCALE_USER_DEFAULT,0,@st,sTimeFmt,@result[1],15);</div><div class="code_line">&nbsp;SetLength(result, lstrlen(@result[1]));</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function GetFileTimeToSystemTime(ft:TFileTime):string;</div><div class="code_line">var</div><div class="code_line">&nbsp;st,lt:TSystemTime;</div><div class="code_line">&nbsp;tz:TTimezoneInformation;</div><div class="code_line">begin</div><div class="code_line">&nbsp;Result:=&#39;&#39;;</div><div class="code_line">&nbsp;if not FileTimeToSystemTime(ft, st) then exit;</div><div class="code_line">&nbsp;GetTimeZoneInformation(tz);</div><div class="code_line">&nbsp;SystemTimeToTzSpecificLocalTime(@tz,st,lt);</div><div class="code_line">&nbsp;Result:=SysDateToStr(lt)+&#39; &nbsp;at &nbsp;&#39; + SysTimeToStr(lt);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">// дата/время последнего выключения (или перезагрузки) системы</div><div class="code_line">function GetLastSystemShutdown:string; </div><div class="code_line">var</div><div class="code_line">&nbsp;ft:TFileTime;</div><div class="code_line">&nbsp;reg:TRegistry;</div><div class="code_line">begin</div><div class="code_line">&nbsp;Result:=&#39;&#39;;</div><div class="code_line">&nbsp;reg:=TRegistry.Create;</div><div class="code_line">&nbsp;try</div><div class="code_line">&nbsp;&nbsp;reg.RootKey:=HKEY_LOCAL_MACHINE;</div><div class="code_line">&nbsp;&nbsp;if (not reg.OpenKeyReadOnly(&#39;System\CurrentControlSet\Control\Windows&#39;)) then exit;</div><div class="code_line">&nbsp;&nbsp;if (reg.ReadBinaryData(&#39;ShutdownTime&#39;,ft,sizeof(ft))=0) then exit</div><div class="code_line">&nbsp;finally</div><div class="code_line">&nbsp;&nbsp;reg.Free</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;Result:= GetFileTimeToSystemTime(ft)</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">// дата/время старта системы</div><div class="code_line">function NtGetBootDateTime:string; </div><div class="code_line">var</div><div class="code_line">&nbsp;sti : SYSTEM_TIME_OF_DAY_INFORMATION;</div><div class="code_line">&nbsp;status : NTSTATUS;</div><div class="code_line">&nbsp;ftSystemBoot: FILETIME;</div><div class="code_line">&nbsp;ST:TSystemTime;</div><div class="code_line">begin</div><div class="code_line">&nbsp;Result:=&#39;&#39;;</div><div class="code_line">&nbsp;status:=NtQuerySystemInformation(SystemTimeOfDayInformation, @sti,sizeof(SYSTEM_TIME_OF_DAY_INFORMATION),nil);</div><div class="code_line">&nbsp;if (status&#60;&#62;NO_ERROR) then exit;</div><div class="code_line">&nbsp;ftSystemBoot := PFILETIME(@(sti.BootTime))^;</div><div class="code_line">&nbsp;if FileTimeToLocalFileTime(ftSystemBoot,ftSystemBoot) then</div><div class="code_line">&nbsp;if FileTimeToSystemTime(ftSystemBoot,ST) then</div><div class="code_line">&nbsp;Result:=SysDateToStr(ST)+&#39; &nbsp;at &nbsp;&#39;+SysTimeToStr(ST)</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;Label1.Caption:=&#39;System start: &#39;+NtGetBootDateTime;</div><div class="code_line">&nbsp;label2.Caption:=&#39;Last system shutdown: &#39;+GetLastSystemShutdown;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
PS: работает только в NT и выше.<br>
<br>
<strong class='tag-b'>Автор:</strong> <a class='tag-url' href='http://forum.sources.ru/index.php?showuser=12367' target='_blank'>Krid</a>]]></description>
        <author>Krid</author>
        <category>Системные функции, WinAPI, работа с железом</category>
      </item>
	
      </channel>
      </rss>
	