Delphi - база знаний

       

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


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



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

Автор ответа: podval
Взято с Vingrad.ru






1) Вариант №1
//**********************************************************
// Функция (раздел 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

2) Вариант №2
***************************************************
Для изменения системного времени используется сложный спобой (через строки).
DateTimeToSystemTime(tSetDati,Tst); - работает быстрее и код короче


3) третий способ:
/////////////////////////////////////////////////////////////
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


Автор ответа: Pegas
Взято с 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;

Взято с Исходников.ru



Содержание раздела