| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > запись в реестр и считывание с него |
| Автор: curumb 23.5.2010, 20:48 | ||
Помогите, пожалуйста разобраться:
Что не так? записывать записывает, но не сравнивает даты и период, а прордолжает дальше работать. //------------------------------------ В общем делаю ограничение пользования программой в днях Вообще, хотелось бы сделать, как в "Касперском", есть ключ на определенное время.Ты его устанавливаешь, пользуешься программой, истекает время, все - сообщение, выход из программы, берешь другой ключ. Мож подскажите, как можно такое реализовать. |
| Автор: cyberstream 24.5.2010, 09:29 | ||
Код рабочий. Сабж реализует. Не под администратором по умолчанию нет разрешений на запись в HKEY_LOCAL_MACHINE. |
| Автор: curumb 24.5.2010, 22:49 |
| Код рабочий. Сабж реализует. - Что такое сабж??? А вообще я в правильную ветку записываю или нужно,мож в другую??? |
| Автор: Данкинг 24.5.2010, 22:55 |
Кому нужно? Откуда же мы тут знаем, в какую ветку тебе нужно записывать? Добавлено через 1 минуту и 42 секунды А вообще после date и now разве скобки не нужны? date(), now() ? |
| Автор: cyberstream 25.5.2010, 08:42 |
| http://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%B1%D0%B6 http://www.winpedia.ru/content/view/877/58/. В твоём случае я бы использовал ту же. Скобки не нужны. Это Delphi. |
| Автор: curumb 25.5.2010, 16:21 |
| Спасибо за советы. а за статью отдельное! |
| Автор: curumb 26.5.2010, 18:37 |
| И все равно почему-то не проверяет условие проверки даты - if now-data<2 then begin // если прошло меньше 2 дней с момента записи в реестр, то освобождаю объект reg.free; end else if now-data>2 then begin//если прошло больше 2 дней с момента записи в реестр, то вывожу сообщение reg.free; ShowMessage('Действие лицензии истекло'); Form44.Close;// и закрываю все Form1.Close; просто работает как и работала... Не подскажите, в чем может быть дело? |
| Автор: Данкинг 26.5.2010, 18:50 |
| curumb, посмотри, какое значение у тебя в переменной data. |
| Автор: cyberstream 26.5.2010, 19:55 | ||||
| Вместе с датой и время в реестр пишется, считывается и сравнивается с now. С какой точностью будут отмеряться двое суток? Не хочешь проверить data отладчиком - воткни ShowMessage
|
| Автор: curumb 27.5.2010, 20:28 |
| ОК, попробую такие варианты...спс |
| Автор: curumb 28.5.2010, 21:50 |
| С какой точностью будут отмеряться двое суток? Точность особого значения не имеет...период приблизительный. Я в Delphi не особо силен, поэтому не знаю как отладчиком проверить дату, воспользовался представленным кодом - ShowMessage('Дата в реестре: '+DateTimeToStr(data)+ '. Разность: ' + FloatToStr(now-data)); //уберу, когда разберусь Дату в реестре почему то перезаписывает каждый раз при запуске, не скажите с чем может быть связано? |
| Автор: cyberstream 29.5.2010, 18:29 | ||
По умолчанию RootKey установлено в HKEY_CURRENT_USER.
|
| Автор: curumb 29.5.2010, 23:10 |
| procedure TForm1.FormCreate(Sender: TObject); var Reg: TRegistry; data:TDateTime; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if not Reg.KeyExists('Software\RiseV1.0.0.0') then begin Reg.OpenKey('Software\RiseV1.0.0.0', true); Reg.WriteDate('1Rise', Date); Reg.CloseKey; end else if Reg.KeyExists('Software\RiseV1.0.0.0') then begin Reg.OpenKey('Software\RiseV1.0.0.0', false); data:=Reg.ReadDate('1Rise'); if now-data<1 then begin Reg.CloseKey; end else if now-data>1 then begin Reg.CloseKey; //здесь пишу: Form1.Close; - выдает ошибку и не закрывает приложение (Acces in violetion at address 0000000 - что-то такое) end; end; finally Reg.Free; inherited; end; end; ------------------------------------------------------------------------- Все работает. Единственное, что не получается, закрыть все приложение. Кто-нибудь может подсказать, как это сделать? |
| Автор: curumb 29.5.2010, 23:34 |
| Разобрался, нашел: Application.Terminate все закрывает. Всем спасибо кто откликнулся |