Как изменить системное время?
Материал из 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