Sergey_Demchuk
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Немного перемудрил я что то. Вытягивать дату из реестра мне и не надо. А надо ее туда наоборот занести значение от текущей даты плюс 50 дней. Код: Buf: array[0..255] of Byte; ... Temp:=DateToStr(Date); AktDay:= Copy (Temp, 1, Pos('.',Temp)-1); Temp:= StringReplace (Temp, AktDay + '.','',[rfIgnoreCase]); AktMonth:= Copy (Temp, 1, Pos('.',Temp)-1); Temp:= StringReplace (Temp, AktMonth + '.','',[rfIgnoreCase]); AktYear:= Temp; FillMemory(@Buf, SizeOf(Buf), 0); reg:=TRegistry.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SYSTEM\CurrentControlSet\Data', false); REG.ReadBinaryData('Data', Buf, SizeOf(Buf)); ii:=1; if ((Buf[ii]=$00) and (Buf[ii+1]=$d3)) then begin TmpDate := EncodeDate(StrToInt(AktYear), StrToInt(AktMonth), StrToInt(AktDay)); TmpDate := IncDay(TmpDate, 50); Buf[ii+3] := YearOf(TmpDate) - 2000; Buf[ii+2] := MonthOf(TmpDate); Buf[ii+4] := DayOf(TmpDate); end; | Проблема в том, что значения в реестре получаются неправильные. Причина видимо в том, что его все таки видимо заносить не напрямую. Как писал несколькими страницами ранее, формула есть для Екселя. Цитата: Клетка А1 =ДЕС.В.ДВ(250;8) результат в клетке 11111010 Клетка А2 =ДЕС.В.ДВ(ДЕНЬ("27.11.2011");8) результат в клетке 00010111 Клетка А3 ==ПРАВСИМВ(СУММПРОИЗВ(НЕ(ПСТР(A1;СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)));1)=(ПСТР(A2;СТОЛБЕЦ(СМЕЩ($A$2;0;0;1;ДЛСТР(A1)));1)))*1;10^(ДЛСТР(A1)-СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)))))+10^ДЛСТР(A1);ДЛСТР(A1)) результат 11101101 А вот этот результат в последней клетке мне уже просто останется преобразовать в HEX, это просто. А вот эту формулу пока немогу правильно записать на паскале. Цитата:=ДЕС.В.ДВ(250;8) 250 это Маска XOR Добавлено: Ячейка А1 дополняет выбранные целочисленные биты ячейки А2. В екселе конечно такой функции нету, Я так понимаю, что нужно написать что то типа 11111010 XOR 00010111 и в результате должно быть 11101101 | Я думал что прокатит Buf[ii+5] := (YearOf(TmpDate)-2000) xor 250 но результат тоже неверен. Сначала надо переводить в двоичный вот это (YearOf(TmpDate)-2000) и вот это (250), затем делать между ними XOR и обратно переводить в HEX. Тогда результат получается тот что надо. Я это сделал, но все переменные у меня в текстовом виде и как такое значение занести затем в реестр в бинарном виде, у меня не получилось |