Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись в реестр и считывание с него, работа с реестром 
:(
    Опции темы
curumb
Дата 23.5.2010, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



Помогите, пожалуйста разобраться:

Код

procedure TForm1.FormCreate(Sender: TObject);//работа с реестром
var
reg:TRegistry;// объявляю переменную
begin
reg := TRegistry.Create;//создаю объект
if not reg.KeyExists('\Software\RiseV1.0.0.0') then begin//если нет ключа то
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('\Software\RiseV1.0.0.0', true);//создаю и открываю
reg.WriteDate('1DT', Date);//записываю
reg.CloseKey;//закрываю
reg.Free;//освобождаю объект
end else
if reg.KeyExists('\Software\RiseV1.0.0.0') then begin//если ключ есть, то освобождаю объект
reg.Free;
end;
//------
procedure TForm1.Form1Show(Sender: TObject);//работа с реестром
var
reg:TRegistry;
data:TDateTime;
begin
reg := TRegistry.Create;//создаю объект
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.KeyExists('\Software\RiseV1.0.0.0') then//если ключ существует то
reg.OpenKey('Software\RiseV1.0.0.0', true);//открываю ключ
data:=reg.ReadDate('1DT');//читаю дату
reg.CloseKey;//закрываю ключ
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;
end;

Что не так? записывать записывает, но не сравнивает даты и период, а прордолжает дальше работать.
//------------------------------------
В общем делаю ограничение пользования программой в днях
Вообще, хотелось бы сделать, как в "Касперском", есть ключ на определенное время.Ты его устанавливаешь, пользуешься программой, истекает время, все - сообщение, выход из программы, берешь другой ключ. Мож подскажите, как можно такое реализовать.


Это сообщение отредактировал(а) bems - 24.5.2010, 22:43
PM MAIL   Вверх
cyberstream
Дата 24.5.2010, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 7.9.2006

Репутация: нет
Всего: 4



Цитата
Что не так? 
Выяснить поможет отладчик.

Код рабочий. Сабж реализует.
Не под администратором по умолчанию нет разрешений на запись в HKEY_LOCAL_MACHINE.
--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
curumb
Дата 24.5.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



Код рабочий. Сабж реализует. - Что такое сабж???
А вообще я в правильную ветку записываю или нужно,мож в другую???




Это сообщение отредактировал(а) curumb - 24.5.2010, 22:51
PM MAIL   Вверх
Данкинг
Дата 24.5.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(curumb @  24.5.2010,  23:49 Найти цитируемый пост)
Что такое сабж???

 smile 
Цитата(curumb @  24.5.2010,  23:49 Найти цитируемый пост)
А вообще я в правильную ветку записываю или нужно,мож в другую???

Кому нужно? Откуда же мы тут знаем, в какую ветку тебе нужно записывать? smile А код действительно нормальный.

Добавлено через 1 минуту и 42 секунды
А вообще после date и now разве скобки не нужны? date(), now() ?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
cyberstream
Дата 25.5.2010, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 7.9.2006

Репутация: нет
Всего: 4



Вопрос первый

Какая ветвь для чего. В твоём случае я бы использовал ту же. 

Скобки не нужны. Это Delphi. smile
--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
curumb
Дата 25.5.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



Спасибо за советы. 
а за статью отдельное!
PM MAIL   Вверх
curumb
Дата 26.5.2010, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



И все равно почему-то не проверяет условие проверки даты - 

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;

просто работает как и работала... Не подскажите, в чем может быть дело?
PM MAIL   Вверх
Данкинг
Дата 26.5.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



curumb, посмотри, какое значение у тебя в переменной data.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
cyberstream
Дата 26.5.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 7.9.2006

Репутация: нет
Всего: 4



Вместе с датой и время в реестр пишется, считывается и сравнивается с now. С какой точностью будут отмеряться двое суток?  smile 

Не хочешь проверить data отладчиком - воткни ShowMessage
Код

data:=reg.ReadDate('1DT');//читаю дату
reg.CloseKey;//закрываю ключ
ShowMessage('Дата в реестре: '+DateTimeToStr(data)+ '.   Разность: ' + FloatToStr(now-data)); //уберу, когда разберусь
   … но лучше бы smile отладчиком. 

Код

if reg.KeyExists('\Software\RiseV1.0.0.0') then//если ключ существует то
reg.OpenKey('Software\RiseV1.0.0.0', true);//открываю ключ
   Здесь забыл ведущий бэкслэш, в другом месте можешь очепятаться серьёзней. Закинь путь в константу/переменную.
--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
curumb
Дата 27.5.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



ОК, попробую такие варианты...спс smile 
PM MAIL   Вверх
curumb
Дата 28.5.2010, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



С какой точностью будут отмеряться двое суток?   
Точность особого значения не имеет...период приблизительный.

Я в Delphi не особо силен, поэтому не знаю как отладчиком проверить дату, воспользовался представленным кодом - 

ShowMessage('Дата в реестре: '+DateTimeToStr(data)+ '.   Разность: ' + FloatToStr(now-data)); //уберу, когда разберусь

Дату в реестре почему то перезаписывает каждый раз при запуске, не скажите с чем может быть связано?

PM MAIL   Вверх
cyberstream
Дата 29.5.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 7.9.2006

Репутация: нет
Всего: 4



По умолчанию RootKey установлено в HKEY_CURRENT_USER.
Код

reg := TRegistry.Create;//создаю объект
reg.RootKey := HKEY_LOCAL_MACHINE;
if not reg.KeyExists('\Software\RiseV1.0.0.0') then begin//если нет ключа то


--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
curumb
Дата 29.5.2010, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



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:12
PM MAIL   Вверх
curumb
Дата 29.5.2010, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



Разобрался, нашел: Application.Terminate все закрывает.
Всем спасибо кто откликнулся smile 

Это сообщение отредактировал(а) curumb - 29.5.2010, 23:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.