Datetimetosystemtime

  • Автор темы Shnur
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Shnur

Вот сижу мучаюсь, как сделать так чтобы я мог програмно поменять текущее время на машине, я так понял, что есть команда типа DateTimeToSystemTime...

Объясните мне плз как ей пользоваться прмиер таков:

DateTimeToSystemTime(DateTimePicker1.Time, а вот что тут делать я так и не пойму)
 
M

Maniacosaur

Приведенная тобой функция лишь преобразует дату из одного формата в другой.
Тебе поможет функция API - SetSystemTime.

The SetSystemTime function sets the current system time and date. The system time is expressed in Coordinated Universal Time (UTC).

BOOL SetSystemTime(
CONST SYSTEMTIME *lpSystemTime // system time
);
Parameters
lpSystemTime
[in] Pointer to a SYSTEMTIME structure that contains the current system date and time.
The wDayOfWeek member of the SYSTEMTIME structure is ignored.

Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

А вот структура, которая передается в качестве параметра:
Код:
_SYSTEMTIME { 
 WORD wYear; 
 WORD wMonth; 
 WORD wDayOfWeek; 
 WORD wDay; 
 WORD wHour; 
 WORD wMinute; 
 WORD wSecond; 
 WORD wMilliseconds; 
}

Ферштейн?
 
S

Shnur

Ферштейн, но появился теперя другой прикол, значит шо я делаю:

Код:
[b]procedure TForm1.Button1Click(Sender: TObject);
var
systemtime:_SYSTEMTIME;
H:TDateTime;
begin
H:=('2:00');
DateTimeToSystemTime(DateTimePicker1.Time-H, systemtime);
SetSystemTime(systemtime);
end;[/b]

тук вот в чем прикол, Н это часавой пояс, так вот как определить этот часовой пояс в системе, что бы не получалось ерунды, вроде ставишь 12:00 а тебе выдает 13:00 или 10:00...

Что делать и как это исправить????
 
M

Maniacosaur

Чтобы не лезть в дебри попробуй следующее:
1. Получи текущее системное время с помощью функции GetSystemTime.
2. С помощью функций HourOf, MinuteOf, SecondOf, MilliSecondOf и тд извлеки время из DateTimePicker1.Time и присвой значения соответствующим полям в SYSTEMTIME
3. Выполни SetSystemTime

Пиши, если не получится, практически попробую и результат выложу
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!