![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение из реестра
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 - должно спасти ОРД :)