Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
ВнизНе работает RegKey.KeyExists Найти похожие ветки
← →
dobriy-kot © (2008-05-14 12:17) [0]Пытаюсь сделать проверку на существование ключа в реестре, чтобы если он уже создан просто его считать. Но условие не проходит, пошаговое выполнение программы показывает, что компилятор проскакивает условный оператор.
RegKey.OpenKey("Software\Test",true);
if RegKey.KeyExists("Software\Test") then
RegPass:= RegKey.ReadString("Crypto")
else
begin
RegKey:= TRegIniFile.Create("Software\Test");
RegKey.WriteString("Crypto",CryptoValue);
end;
Не работает такжеif RegKey.KeyExists("Crypto") then
Подскажите, пожалуйста, что можно сделать?
← →
Anatoly Podgoretsky © (2008-05-14 12:38) [1]"Software\Test" а это где, а система знает где это?
Читать до посинения, абсолютные и относительные пути.
← →
Anatoly Podgoretsky © (2008-05-14 12:39) [2]И почему TRegIniFile - ты что для Windows 3.1 пишешь?
← →
dobriy-kot © (2008-05-14 12:39) [3]Да, знает. По умолчанию все пишется в HKEY_CURRENT_USER.
← →
dobriy-kot © (2008-05-14 12:41) [4]
> И почему TRegIniFile - ты что для Windows 3.1 пишешь?
Переменная типа TRegistry.var RegKey: TRegistry;
← →
{RASkov} © (2008-05-14 13:00) [5]> [0] dobriy-kot © (14.05.08 12:17)
> Но условие не проходит, пошаговое выполнение программы показывает,
> что компилятор проскакивает условный оператор.
Потому как после выполнения первой строчки у тебя уже есть этот "Software\Test"
и соответственно следующяя проверка выполняется но возможно не найден "Crypto"....
Так как туда он в данном месте не пишеться.... т.е. вот это:
> begin
> RegKey:= TRegIniFile.Create("Software\Test");
> RegKey.WriteString("Crypto",CryptoValue);
> end;
никогда не выполнится....
← →
Anatoly Podgoretsky © (2008-05-14 13:17) [6]TRegIniFile никак не похож на TRegistry
← →
dobriy-kot © (2008-05-14 14:14) [7]
> т.е. вот это:
>
> > begin
> > RegKey:= TRegIniFile.Create("Software\Test");
> > RegKey.WriteString("Crypto",CryptoValue);
> > end;
>
> никогда не выполнится....
Как раз это и выполняется прекрасно. А мне надо, чтобы и проверка выполнялась. Это возможно?
← →
Сергей М. © (2008-05-14 14:21) [8]
> мне надо, чтобы и проверка выполнялась
Проверка должна начинаться раньше, так как это описано в справке к OpenKey:
OpenKey returns true if the key is successfully opened or created
Где она у тебя, эта проверка ?
Какой резон что-то там пыжиться дальше по тексту, если ты сразу же не убедился в том, что ключ успешно создан или открыт в рез-те вызова OpenKey ?
← →
Сергей М. © (2008-05-14 14:24) [9]
> Не работает также
> if RegKey.KeyExists("Crypto") then
Похоже, что ты путаешь ключ "Crypto" со значением "Crypto" некоего ключа
← →
dobriy-kot © (2008-05-14 14:44) [10]Сергей М.
Смотри. Суть такова: если не существует ключ Crypto, то программа должна запросить создание пароля (потому что он отсутствует). Если существует - то просто прочесть значение ключа Crypto из реестра.
Получается так: если раздел Test отсутствует, то OpenKey создает его, на что показывает параметр true. Если он есть, то просто открывается (Соответственно, наличие раздела нас не интересует - он в любом случае появится).
После этого я хочу выяснить, существует ли ключ Crypto в этом разделе. Его значение не существенно. Если ключ не существует, мы его создаем. Если существует - читаем его значение.
Как написано в хелпе о KeyExists - "Determines if a specified key exists". Насколько я понимаю, именно то, что нужно.
← →
Anatoly Podgoretsky © (2008-05-14 14:50) [11]> dobriy-kot (14.05.2008 14:44:10) [10]
У ключей нет значений, ты всетаки или путаешь или не понимаешь, что такое ключ, а что такое параметр.
← →
Сергей М. © (2008-05-14 15:17) [12]
> После этого я хочу выяснить, существует ли ключ Crypto в
> этом разделе
И где в своем коде ты это делаешь ?
Read/WriteString работает не с ключем по имени Crypto, а с неким значением по имени Crypto, возможно существующим в открытом/созданном тобой ключе Software\Test !
← →
Сергей М. © (2008-05-14 15:25) [13]Пример:
[HKEY_CURRENT_USER\Software\Skype\Phone\UI\General
]
"Language"="ru"
Выделенное жирным - полное имя ключа, включающее абсолютный путь к ключу от корня
Language - имя одного из параметров этого ключа
ru - значение параметра Language
Так вот Read/WriteString будет обращаться именно к значению параметра Language ключа HKEY_CURRENT_USER\Software\Skype\Phone\UI\General, а не к ключу HKEY_CURRENT_USER\Software\Skype\Phone\UI\General\Language.
Ущучиваешь разницу ?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.101 c