Как изменить системное время?
Функция SetSystemTime.
Обрати внимание на привилегии.
Взято с Vingrad.ru https://forum.vingrad.ru
//********************************************************** // Функция (раздел 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;
Для изменения системного времени используется сложный спобой (через строки).
DateTimeToSystemTime(tSetDati,Tst);
- работает быстрее и код короче
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;
Взято с Vingrad.ru https://forum.vingrad.ru
Следующие несколько строк кода позволяют установить системную дату и время без использования панели управления. Дата и время устанавливаются двумя раздельными компонентами 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;
Взято из https://forum.sources.ru
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;
DelphiWorld 6.0
Следующие несколько строк кода позволяют установить системную дату и время без использования панели управления. Дата и время устанавливаются двумя раздельными компонентами TDateTimePicker. Дата и время декодируются и передаются в API функцию.
Из значения часа вычитается 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;
DelphiWorld 6.0