Очень-очень странные эти англоязычные люди... И счёт времени у них странный!

 

Вот так у них наступает полдень:

 

11:00 AM  (11 утра)

12:00 PM  <- полдень

1:00 PM  (13 часов)

 

Итак 12 PM - это полдень, а 12 AM - это полночь

 

Code:

function LastInput: DWord;

var

  LInput: TLastInputInfo;

begin

  LInput.cbSize := SizeOf(TLastInputInfo);

  GetLastInputInfo(LInput);

  Result := GetTickCount - LInput.dwTime;

end;

 

 

//Example:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

  Label1.Caption := Format('System Idle since %d ms', [LastInput]);

end;

 

 

// The GetLastInputInfo function retrieves the time

// of the last input event.

// Minimum operating systems: Windows 2000

 

  

Code:

Shellexecute(handle, 'Open', 'Rundll32.exe', 'shell32.dll,Control_RunDLL TIMEDATE.CPL', Pchar(Getsystemdir), 0);

 

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

 

Code:

uses

Registry;

 

...

 

var

reg : TRegistry;

ts : TStrings;

i : integer;

begin

reg := TRegistry.Create;

reg.RootKey := HKEY_LOCAL_MACHINE;

reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones', false);

if reg.HasSubKeys then

begin

   ts := TStringList.Create;

   reg.GetKeyNames(ts);

   reg.CloseKey;

   for i := 0 to ts.Count -1 do

   begin

     reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones\' + ts.Strings[i], false);

     Memo1.Lines.Add(ts.Strings[i]);

     Memo1.Lines.Add(reg.ReadString('Display'));

     Memo1.Lines.Add(reg.ReadString('Std'));

     Memo1.Lines.Add(reg.ReadString('Dlt'));

     Memo1.Lines.Add('----------------------');

     reg.CloseKey;

   end;

   ts.Free;

end

else

   reg.CloseKey;

reg.free;

end;

 

Ниже приведён код обработчика события OnClick для Button1. Он показывает диалоговое окошко с текстом в следующем формате

 Windows started on Thursday, February 10, 2000 at 11:42:46 AM

Its been up for 0 days, 3 hours, 22 minutes, 54 seconds

 

 

Code:

// Wait 0.2ms

 

procedure PerformanceDelay;

var

hrRes, hrT1, hrT2, dif: Int64;

begin

if QueryPerformanceFrequency(hrRes) then

begin

   QueryPerformanceCounter(hrT1);

   repeat

     QueryPerformanceCounter(hrT2);

     dif := (hrT2 - hrT1) * 10000000 div hrRes;

   until dif > 2;

end;

end;

 

 Функция SetSystemTime.

Обрати внимание на привилегии.

 Автор ответа: podval

Хранится в глобальных переменных now, date, time

 

Следующий пример демонстрирует обработку сообщения WM_TIMECHANGE. Приложение, которое изменяет системное время, посылает сообщение WM_TIMECHANGE всем окнам верхнего уровня.

 

Code:

{ **** UBPFD ***************

>> Определение текущего времени(часы, минуты, секунды)

 Зависимости: SysUtils, Classes

Автор:       Eagle, Copyright:   MegaSoft

***************************************************** }

 

unit gettime;

 

interface

uses SysUtils, Classes;

 

function gethours: integer;

function getmins: integer;

function getsecs: integer;

 

implementation

 

function gethours: integer;

var

s: string;

h: integer;

begin

s := timetostr(time);

h := strtoint(s[1] + s[2]);

Result := h;

end;

 

function getmins: integer;

var

s: string;

h: integer;

begin

s := timetostr(time);

h := strtoint(s[4] + s[5]);

Result := h;

end;

 

function getsecs: integer;

var

s: string;

h: integer;

begin

s := timetostr(time);

h := strtoint(s[7] + s[8]);

Result := h;

end;

 

end.