Как изменить системное время?

Материал из DRKB

Как изменить системное время?[править | править код]

Функция SetSystemTime(). Обрати внимание на привилегии.


Author: podval
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01638



//**********************************************************
// Функция (раздел Public) SetPCSystemTime изменяет системную дату и время.
// Параметр(ы) : tDati Новая дата и время
// Возвращаемые значения: True - успешное завершение
// False - метод несработал
//************************************************************
function SetPCSystemTime(tDati: TDateTime): Boolean;
var
  tSetDati: TDateTime;
  vDatiBias: Variant;
  tTZI: TTimeZoneInformation;
  tST: TSystemTime;
begin
  GetTimeZoneInformation(tTZI);
  vDatiBias := tTZI.Bias / 1440;
  tSetDati := tDati + vDatiBias;
  with tST do
  begin
    wYear := StrToInt(FormatDateTime('yyyy', tSetDati));
    wMonth := StrToInt(FormatDateTime('mm', tSetDati));
    wDay := StrToInt(FormatDateTime('dd', tSetDati));
    wHour := StrToInt(FormatDateTime('hh', tSetDati));
    wMinute := StrToInt(FormatDateTime('nn', tSetDati));
    wSecond := StrToInt(FormatDateTime('ss', tSetDati));
    wMilliseconds := 0;
  end;
  SetPCSystemTime := SetSystemTime(tST);
end;


ID: 01639



Для изменения системного времени используется сложный способ (через строки).

DateTimeToSystemTime(tSetDati, Tst);

- работает быстрее и код короче


ID: 01640



procedure SetTime(Hour, Min, Sec, Hundreths: Byte); assembler;
asm
  mov ch, Hour
  mov cl, Min
  mov dh, Sec
  mov dl, Hundreths
  mov ah, $2d
  int $21
end;

procedure SetDate(Year: word; Month, Day: Byte); assembler;
asm
  mov cx, Year
  mov dh, Month
  mov dl, Day
  mov ah, $2b
  int $21
end;


Author: Pegas
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01641



Следующие несколько строк кода позволяют установить системную дату и время без использования панели управления. Дата и время устанавливаются двумя раздельными компонентами TDateTimePicker. Дата и время декодируются и передаются в API функцию. Из значения часа вычитается 2 для установки правильного времени. (Примечание Vit: вычитается не 2 часа а разница с Гринвичем)

procedure TfmTime.btnTimeClick(Sender: TObject);
var
  vsys: _SYSTEMTIME;
  vYear, vMonth, vDay, vHour, vMin, vSec, vMm: Word;
begin
  DecodeDate(Trunc(dtpDate.Date), vYear, vMonth, vDay);
  DecodeTime(dtpTime.Time, vHour, vMin, vSec, vMm);
  vMm := 0;
  vsys.wYear := vYear;
  vsys.wMonth := vMonth;
  vsys.wDay := vDay;
  vsys.wHour := (vHour - 2);
  vsys.wMinute := vMin;
  vsys.wSecond := vSec;
  vsys.wMilliseconds := vMm;
  vsys.wDayOfWeek := DayOfWeek(Trunc(dtpDate.Date));
  SetSystemTime(vsys);
end;


Source: Взято из http://forum.sources.ru
ID: 01642
ID: 01644



function SetTime(DateTime:TDateTime): boolean;
var
  st: TSystemTime;
  ZoneTime: TTimeZoneInformation;
begin
  GetTimeZoneInformation(ZoneTime);
  DateTime:=DateTime+ZoneTime.Bias/1440;
  with st do
  begin
    DecodeDate(DateTime, wYear, wMonth, wDay);
    DecodeTime(DateTime, wHour, wMinute, wSecond, wMilliseconds);
  end;
  Result:=SetSystemTime(st);
end;


Source: http://delphiworld.narod.ru
ID: 01643