![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Snake_B |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: ![]() ![]() ![]() |
Не могу разобраться как считать из реестра даные часовых поясов о датах перехода на летнее/зимнее время.
Хранятся тут: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\ Параметр TZI, в reg_binary... ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата такая вот функция не сработает однозначно. Ибо прототип неправильный. Правильный - такой:const DLL = 'ntdll.dll'; function RtlLocalTimeToSystemTime(LocalTime: LongInt; SystemTime: LongInt) : NTSTATUS; stdcall; external DLL name 'RtlLocalTimeToSystemTime'; function RtlLocalTimeToSystemTime( (из исходников JEDI). Чувствуешь разницу, да? Указатели там на LARGE_INTEGER (он же Int64), а не просто LongInt-ы. А насчет перевести в нужный формат - есть DateTimeToTimeStamp, которая это и делает. |
Snake_B |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: ![]() ![]() ![]() |
не сработает однозначно. Ибо прототип неправильный. Правильный - такой: function RtlLocalTimeToSystemTime( (из исходников JEDI). Чувствуешь разницу, да? Указатели там на LARGE_INTEGER (он же Int64), а не просто LongInt-ы. А насчет перевести в нужный формат - есть DateTimeToTimeStamp, которая это и делает. спасибо... но сделал по другому... GetTimeZoneInformation(tTZI); DateTimeToSystemTime(tDati, st); SystemTimeToTzSpecificLocalTime(@tTZI, st, lt); оно DTZ учитывает... правда прийдется рассчитывать наоборот... ну да ладно... |
Snake_B |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: ![]() ![]() ![]() |
ну... у меня опять вопросик...
вот собственно код: Код 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 |
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 20:15 |