IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Считывание даных часовых поясов из реестра..., Даты перехода на зимнее/летнее время...
Snake_B
сообщение 29.04.2009 8:36
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


Не могу разобраться как считать из реестра даные часовых поясов о датах перехода на летнее/зимнее время.
Хранятся тут:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
Параметр TZI, в reg_binary... unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 3.09.2010 22:20
Сообщение #2


Гость






Цитата
такая вот функция
const DLL = 'ntdll.dll';
function RtlLocalTimeToSystemTime(LocalTime: LongInt; SystemTime: LongInt) : NTSTATUS; stdcall; external DLL name 'RtlLocalTimeToSystemTime';
не сработает однозначно. Ибо прототип неправильный. Правильный - такой:
function RtlLocalTimeToSystemTime(
LocalTime: PLARGE_INTEGER;
SystemTime: PLARGE_INTEGER): NTSTATUS; stdcall;
external DLL name 'RtlLocalTimeToSystemTime';


(из исходников JEDI). Чувствуешь разницу, да? Указатели там на LARGE_INTEGER (он же Int64), а не просто LongInt-ы.

А насчет перевести в нужный формат - есть DateTimeToTimeStamp, которая это и делает.
 К началу страницы 
+ Ответить 
Snake_B
сообщение 3.09.2010 22:42
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 4.09.2010 7:20) *

не сработает однозначно. Ибо прототип неправильный. Правильный - такой:
function RtlLocalTimeToSystemTime(
LocalTime: PLARGE_INTEGER;
SystemTime: PLARGE_INTEGER): NTSTATUS; stdcall;
external DLL name 'RtlLocalTimeToSystemTime';


(из исходников JEDI). Чувствуешь разницу, да? Указатели там на LARGE_INTEGER (он же Int64), а не просто LongInt-ы.

А насчет перевести в нужный формат - есть DateTimeToTimeStamp, которая это и делает.


спасибо...
но сделал по другому...
GetTimeZoneInformation(tTZI);
DateTimeToSystemTime(tDati, st);
SystemTimeToTzSpecificLocalTime(@tTZI, st, lt);
оно DTZ учитывает... правда прийдется рассчитывать наоборот... ну да ладно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Snake_B
сообщение 9.09.2010 2:54
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


ну... у меня опять вопросик...
вот собственно код:
Код

                       ReadBinaryData('TZI',rTZ,SizeOf(RTZ));
                       rTZ.Bias:=-660;
                       WriteBinaryData('TZI',rTZ,SizeOf(RTZ));

в последней строке выдает ошибку (Failed to set data for TZI)...
значение rTZ.Bias до изменения -720...
вот как это дело победить? ))

вот если что полный код:
Код
procedure ProcessingTZInfos;
type TRec = record Bias, StdBias, DltBias: Integer; StdDate, DltDate: TSystemTime; end;
var PatchM: string; RootKey: HKEY; RTZ: TRec;
begin
        PatchM:='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\';
        RootKey := HKEY_LOCAL_MACHINE;
        if RegKeyExists(RootKey, PatchM) then begin
                  with TRegistry.Create(KEY_READ) do try RootKey := HKEY_LOCAL_MACHINE;
                  if OpenKey(patchM+'Kamchatka Standard Time\', False) then begin
                       if Readstring('Display')='(GMT+12:00) Петропавловск-Камчатский' then begin
                            ReadBinaryData('TZI', rTZ, SizeOf(RTZ));
                            rTZ.Bias:=-660;
                            WriteBinaryData('TZI', rTZ, SizeOf(RTZ));
                            Writestring('Display', '(GMT+11:00) Магадан, Петропавловск-Камчатский, Курильские острова');
                       end;
                       CloseKey;
                  end;
                  finally Free; end;
        end;
end;


Сообщение отредактировано: Snake_B - 9.09.2010 15:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Snake_B   Считывание даных часовых поясов из реестра...   29.04.2009 8:36
Ozzя   Взято из ДРКБ Возможно, этот код сможет Вам помочь...   29.04.2009 10:07
Snake_B   Взято из ДРКБ Возможно, этот код сможет Вам помоч...   29.04.2009 18:28
volvo   Snake_B, зачем тебе реестр? Вызывай GetTimeZoneInf...   29.04.2009 19:24
Snake_B   Snake_B, зачем тебе реестр? Вызывай GetTimeZoneIn...   1.05.2009 22:43
Snake_B   Snake_B, зачем тебе реестр? Вызывай GetTimeZoneIn...   1.09.2010 23:29
volvo   И с какого такого времени в реестре хранится эта и...   1.05.2009 22:58
Snake_B   И с какого такого времени в реестре хранится эта ...   2.05.2009 9:34
volvo   Ну, смотри... Ты сам хотел читать из реестра (на ф...   2.05.2009 11:17
Snake_B   Ну, смотри... Ты сам хотел читать из реестра (на ...   2.05.2009 19:46
volvo   Как обычно, только тебе придется сначала еще и тип...   2.09.2010 1:43
Snake_B   Как обычно, только тебе придется сначала еще и ти...   2.09.2010 1:52
Lapp   а как этот параметр приравнять к NULL? А поставить...   2.09.2010 2:44
volvo   Андрей, все-таки, nil, а не NULL :) Snake_B Я ж г...   2.09.2010 9:27
Lapp   Андрей, все-таки, nil, а не NULL :)фу ты ну ты.....   2.09.2010 9:41
Snake_B   Андрей, все-таки, [b]nil, а не NULL :) ну, вот ...   2.09.2010 10:39
volvo   Ну, и я попробовал - компилятор это сожрал запрос...   2.09.2010 11:01
Snake_B   Ну, и я попробовал - компилятор это сожрал запрос...   2.09.2010 11:05
volvo   Внимание, вопрос: А что тебе возвращает GetTimeZon...   2.09.2010 12:58
Snake_B   Внимание, вопрос: А что тебе возвращает GetTimeZo...   2.09.2010 13:20
Snake_B   но всё, вопрос вроде закрыт... сделал через ...   3.09.2010 21:46
volvo   не сработает однозначно. Ибо прототип неправильный...   3.09.2010 22:20
Snake_B   не сработает однозначно. Ибо прототип неправильны...   3.09.2010 22:42
Snake_B   ну... у меня опять вопросик... вот собственно код:...   9.09.2010 2:54
Snake_B   ну... у меня опять вопросик... вот собственно код...   9.09.2010 20:56


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.06.2025 20:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"