Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск по реестру

5.2K
07 ноября 2006 года
SerMax
96 / / 04.11.2006
Привет всем ! Назрела идея написать программку, в которую вводится строка. Прога ищет эту строку по ВСЕМУ РЕЕСТРУ. Нашла ключ с таким именем - снесла. Нашла параметр ключа с этим именем - снесла. Т.е поиск и по ключам, и по параметрам ключей..по всему реестру.

Мне нужно знатЬ, как поиск осуществить ??

А то лежит книга ,но там описаны стандартные операции (открытие ключа, закрытие, удаление ,создание.), а поиска нету :((
547
08 ноября 2006 года
Hydra
488 / / 20.06.2006
Смотрим help по TRegistry из vcl и видим у него методы GetKeyNames, GetValueNames, HasSubKeys, GetDataType. А потом засучив рукава пишем процедуру (можно рекурсивную для красоты) которая получает имена текущего ключа, сверяет с искомым значением (опять же чудо-функция pos) и повторяет эту же процедуру с именами и значениями переменных.
257
08 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
поиск можно осуществить с помощью API функций RegEnumKeyEx и RegEnumValue, + использовать RegOpenKeyEx и RegCloseKey.
5.2K
10 ноября 2006 года
SerMax
96 / / 04.11.2006
Если есть возможность обойтись БЕЗ API-функций (GetKeyNames, GetValueNames, HasSubKeys, GetDataType), то лучше их не использовать ?? Или у них есть свои преимущества ?
257
11 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
[quote=SerMax]БЕЗ API-функций (GetKeyNames, GetValueNames, HasSubKeys, GetDataType)[/quote]
в скобках ты перечислил методы класса TRegistry.
[quote=SerMax]лучше их не использовать ?? Или у них есть свои преимущества ?[/quote]
я и с TRegistry работал и с API, так мне API больше понравились и вообще стараюсь в своих программах в основном только API юзать. На первый взгляд покажется, что они сложнее, но если разобраться, то сложностей возникнуть не должно. к тому же если ты посмотришь registry.pas то увидишь, что все методы TRegistry основаны на API!
5.2K
11 ноября 2006 года
SerMax
96 / / 04.11.2006
[QUOTE=kosfiz]в скобках ты перечислил методы класса TRegistry.[/QUOTE]

Знаю. Это относилось к слову БЕЗ. Ночью писал....спать хотел :)
5.2K
11 ноября 2006 года
SerMax
96 / / 04.11.2006
Ну ладно..написал прогу -ищет по реестру, НО НЕВОЗМОЖНО работать с другими прогами. Эта всё процессорное время жрёт :( . Как можно сделатЬ, чтобы осуществлялся поиск, но и работать можно было с другими программами. (ну как в RegEdit поиск устроен) ??
5.2K
11 ноября 2006 года
SerMax
96 / / 04.11.2006
!!!! НАрод, помогите ! Я сижу в непонятках уже 3 часа. Давно хочу фильм посмотреть, но всё пытаюсь понять такую фишку :
ключ
\Software\Microsoft\DirectInput
не хочет открываться, т.е.
Пишу

var reg:TREgistry;
begin
reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('\Software\Microsoft\DirectInput ',false);
ShowMessage(Reg.CurrentPath);

Выводится пустая строка, хотя такой КЛЮЧ есть (уж как только не пытался его открыть, и какие только пути к нему не прописывал)....
соседний с ним ключ
\Software\Microsoft\Direct3d
открывается безо всяких проблем....

Почему так ?
257
11 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
[quote=SerMax]Ну ладно..написал прогу -ищет по реестру, НО НЕВОЗМОЖНО работать с другими прогами. Эта всё процессорное время жрёт . Как можно сделатЬ, чтобы осуществлялся поиск, но и работать можно было с другими программами. (ну как в RegEdit поиск устроен) ??[/quote]
сделай так, чтобы поиск был в отдельном потоке.
[quote=SerMax]reg:=TRegistry.Create;[/quote]
его надо открывать для чтения:
 
Код:
reg:=TRegistry.Create(KEY_READ);

вроде чтобы получить доступ для записи надо иметь определенные привелегии и то запись произойдет при перезапуске системы.
5.2K
11 ноября 2006 года
SerMax
96 / / 04.11.2006
[QUOTE=kosfiz]сделай так, чтобы поиск был в отдельном потоке.

его надо открывать для чтения:

[/code][/QUOTE]

Мне нужно ещё ,чтобы и удалять ключи/параметры можно было
257
11 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
вот глянь тут с доступом KEY_WRITE просто сначала надо сделать чтобы у твоей проги была привелегия SeRestorePrivilege. попробуй вроде теперь должно получаться манипулировать с данным ключом.
5.2K
12 ноября 2006 года
SerMax
96 / / 04.11.2006
Спасибо! Попробовал - теперь работает, даже без
function EnablePrivilege

достаточно было прописать
reg:=TRegistry.Create(KEY_WRITE);

Кстати, саму функцию EnablePrivilege вроде бы разобрал, но поверхностно...нашёл описание всего ,что там есть, в базе MSDN...вроде перевёл...но это только для понятитя общего. Хотелось бы поподробнее узнать описание написанной вами функции. Может бытЬ, выложите комментарии. Запомнится лучше.
5.2K
12 ноября 2006 года
SerMax
96 / / 04.11.2006
Новая проблема: при наличии кода, выложенного выше, не открывается
HKEY_LOCAL_MACHINE\SECURITY

EnablePrivilege выдаёт TRUE...но ключ не открывается.
:((

Попытка прописать reg:=TRegistry.Create(KEY_READ) ни к чему новому не привела
257
12 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
открой этот ключ в regedit.exe и нажми на нём правой кнопкой мыши, выбери пункт резрешения - увидишь почему не можешь открыть тот или иной ключ. вообщем может читать и писать прога, которая была запущена SYSTEM. или же можешь внести себя в список и тогда твоя прога будет делать с этим ключом все что вздумается, но только на твоем компе.
5.2K
12 ноября 2006 года
SerMax
96 / / 04.11.2006
А программно нельзя изменять эти права доступа ?? Программа пишется для себя....но ради интереса....
257
12 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
вроде надо, чтобы твоя прога была сервисом, тогда она может быть запущена от имени SYSTEM ну и иметь полный доступ к реестру, тока надо правильно её проинсталлить.
5.2K
12 ноября 2006 года
SerMax
96 / / 04.11.2006
Блин, что за напасть :
проблема с разного рода ключами наподобии
HKEY_CLASSES_ROOT\CLSID\{3DA165B6-CC41-11d2-BDC6-00C04F79EC6B}\ProgID

при
reg:=TRegistry.Create(KEY_WRITE);
этот ключ не открывается.

при
reg:=TRegistry.Create(KEY_READ);
выдаётся ошибка...видать при попытке изменитьего

уже писал
reg:=TRegistry.Create(KEY_ALL_ACCESS);
отслеживал по дебаггеру. Этот ключ просто не открывается.
Права на ключ поставил все группам, в общем всё, что можно...но не помогает ((

Такая же проблема ещё с ключом HKEY_CLASSES_ROOT - его подключи не открываются...

Помогите ,плз !
257
12 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
а у меня прекрасно открываются с разрешениями по умочанию, причем с KEY_WRITE.
5.2K
15 ноября 2006 года
SerMax
96 / / 04.11.2006
При REY_READ сама ветка CLSID не открывается...
при KEY_WRITE вроде бы подветки открываются, типа {3DA165B6-CC41-11d2-BDC6-00C04F79EC6B}....но не вызывается моя рекурсивнаяфункция, работающая с этим ключом. Хотя с остальными работает :( .

В общем ладно, видать не судьба моей программе лезть в такие ключи. Сделаю просто поиск по тем ключам, где это возможно :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог