Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение из реестра


alexdn ©   (2014-02-13 20:38:00) 

У меня уже волосы дыбом встают, в одном проекте код работает, в другом нет (при пошаговой отладке), прямо волшебство какое-то.. Что здесь может быть не так?
var Reg:TRegistry;
               Regstr:string;

Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('\SOFTWARE\тратата',TRUE);
Regstr:=Reg.ReadString('STR');
Reg.CloseKey;
Reg.Free;


alexdn   (2014-02-15 02:01:00) [1]

Да, интересная статья, хвост я и сделал, вообщем всё нормально, я думаю будет достаточно.


Dennis I. Komarov   (2014-02-15 00:32:00) [2]


> В hkcu один из правильных вариантов - почему бы и нет?

Ну дык это при условии 10 дён на юзверя


Rouse__   (2014-02-15 00:22:00) [3]

В hkcu один из правильных вариантов - почему бы и нет?


Dennis I. Komarov   (2014-02-15 00:18:00) [4]


> Здесь тож задублирую, а то вдруг ты первую ветку не прочитал
> :)
> http://alexander-bagel.blogspot.ru/2014/02/blog-post.html

Да какой там, если он "триал" в HKCU пишет...


Rouse_   (2014-02-14 22:59:00) [5]


> alexdn ©   (14.02.14 00:36) [12]
> Теперь 10 дневный триал я сам напишу..

Здесь тож задублирую, а то вдруг ты первую ветку не прочитал :)
http://alexander-bagel.blogspot.ru/2014/02/blog-post.html


Dennis I. Komarov   (2014-02-14 10:57:00) [6]


> Теперь 10 дневный триал я сам напишу.. Конечно простая запись
> в реестр при желании будет легко отлавливаться, но для рядового
> пользователя этого будет вполне достаточно..

У, Сир, сейчас Вы получите другие грабли... Розыч же сказал, в тело (хвост) и при инсталляции (при первом запуске, с правами админа)


Inovet   (2014-02-14 09:59:00) [7]

> [3] alexdn ©   (13.02.14 20:58)
> с записью проблема

Ну так очевидно надо не
Reg2.RootKey:=HKEY_LOCAL_MACHINE;
а
Reg2.RootKey:=HKEY_CURRENT_USER;


han_malign   (2014-02-14 08:43:00) [8]


> Только в HKCU.

- в W7 оно может по домену гулять, поэтому там есть еще
const HKEY_CURRENT_USER_LOCAL_SETTINGS = DWORD($80000007);
function _regHKCULocal: HKEY;
var
  OS  : TOSVersionInfo;
begin
  OS.dwOSVersionInfoSize := sizeof(OS);
  if( GetVersionEx(OS) and (OS.dwPlatformId = VER_PLATFORM_WIN32_NT{JIC})
      and //W7, 2008 R2 - 6.1
      (OS.dwMajorVersion >= 6) and
      (OS.dwMajorVersion + OS.dwMinorVersion > 6){(6+n)+(1+n)}
  )then
     Result:= HKEY_CURRENT_USER_LOCAL_SETTINGS
  else
     Result:= HKEY_CURRENT_USER;
end;

- который где-то в HKLM прячется...


alexdn   (2014-02-14 00:36:00) [9]

Теперь 10 дневный триал я сам напишу.. Конечно простая запись в реестр при желании будет легко отлавливаться, но для рядового пользователя этого будет вполне достаточно..


alexdn   (2014-02-14 00:19:00) [10]

Всё, всё получилось).


Германн   (2014-02-14 00:11:00) [11]


>  куда лучше вообще писать?

Только в HKCU.
P.S.
Где ты был последние годы что вылез сейчас с этим вопросом?


alexdn   (2014-02-14 00:11:00) [12]

Наверно лучше писать в HKEY_CURRENT_USER\Software


alexdn   (2014-02-14 00:05:00) [13]

Блин, заработало когда запустил программу от имени администратора, но это конечно не есть гут..

> Dennis I. Komarov ©   (13.02.14 23:30) [7]
> Тут другая политика: а с какого перепугу твой софт в HKLM
> писать желает?
Действительно интересный вопрос, а куда лучше вообще писать? я в смысле чтоб это работало и на других машинах, а то не хорошо получить от пользователя уведомление что программу 'выбрасывает'..


Dennis I. Komarov   (2014-02-13 23:30:00) [14]

Тут другая политика: а с какого перепугу твой софт в HKLM писать желает?


Rouse_   (2014-02-13 21:19:00) [15]


> alexdn ©   (13.02.14 21:14) [5]
> Где что можно посмотреть на этот счёт? как открыть ключ
> на письмо и что можно посмотреть про админские права?

Пфф...
Ну технически только MSDN: http://msdn.microsoft.com/en-us/library/ms724871(v=vs.85).aspx


alexdn   (2014-02-13 21:14:00) [16]

> Rouse_ ©   (13.02.14 21:03) [4]
Где что можно посмотреть на этот счёт? как открыть ключ на письмо и что можно посмотреть про админские права?


Rouse_   (2014-02-13 21:03:00) [17]

Эмм...
Ну, как-бы да, ключ открывается только на чтение, поэтому писать и не можешь.
Если хочешь писать в данную ветку тебе (к слову о привилегиях) немножко админские права нужны (или SYSTEM, если сервисом работаешь).


alexdn   (2014-02-13 20:58:00) [18]

> Rouse_ ©   (13.02.14 20:44) [1]
спасибо большое, с OpenKeyReadOnly начало работать, теперь только с записью проблема, тоже видно что то не то.

 Reg2:=TRegistry.Create;
 Reg2.RootKey:=HKEY_LOCAL_MACHINE;
 Reg2.OpenKey('SOFTWARE\тратата',true);
 Reg2.WriteString('STR','111'); //DateToStr(now)
 Reg2.CloseKey;
 Reg2.Free;


Rouse_   (2014-02-13 20:45:00) [19]

зы: и слэш перед "SOFTWARE" убери.


Rouse_   (2014-02-13 20:44:00) [20]

Оть тут скорее всего:


> Reg.RootKey:=HKEY_LOCAL_MACHINE;
> Reg.OpenKey('\SOFTWARE\тратата',TRUE);


1. если что, OpenKey - это функция
2. пытающаяся писать в защищенный раздел реестра (второй параметр)

Reg.OpenKeyReadOnly - должно спасти ОРД :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо