Поиск по реестру
Мне нужно знатЬ, как поиск осуществить ??
А то лежит книга ,но там описаны стандартные операции (открытие ключа, закрытие, удаление ,создание.), а поиска нету :((
Смотрим help по TRegistry из vcl и видим у него методы GetKeyNames, GetValueNames, HasSubKeys, GetDataType. А потом засучив рукава пишем процедуру (можно рекурсивную для красоты) которая получает имена текущего ключа, сверяет с искомым значением (опять же чудо-функция pos) и повторяет эту же процедуру с именами и значениями переменных.
поиск можно осуществить с помощью API функций RegEnumKeyEx и RegEnumValue, + использовать RegOpenKeyEx и RegCloseKey.
Если есть возможность обойтись БЕЗ API-функций (GetKeyNames, GetValueNames, HasSubKeys, GetDataType), то лучше их не использовать ?? Или у них есть свои преимущества ?
в скобках ты перечислил методы класса TRegistry.
[quote=SerMax]лучше их не использовать ?? Или у них есть свои преимущества ?[/quote]
я и с TRegistry работал и с API, так мне API больше понравились и вообще стараюсь в своих программах в основном только API юзать. На первый взгляд покажется, что они сложнее, но если разобраться, то сложностей возникнуть не должно. к тому же если ты посмотришь registry.pas то увидишь, что все методы TRegistry основаны на API!
Знаю. Это относилось к слову БЕЗ. Ночью писал....спать хотел :)
Ну ладно..написал прогу -ищет по реестру, НО НЕВОЗМОЖНО работать с другими прогами. Эта всё процессорное время жрёт :( . Как можно сделатЬ, чтобы осуществлялся поиск, но и работать можно было с другими программами. (ну как в RegEdit поиск устроен) ??
ключ
\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
открывается безо всяких проблем....
Почему так ?
сделай так, чтобы поиск был в отдельном потоке.
[quote=SerMax]reg:=TRegistry.Create;[/quote]
его надо открывать для чтения:
Код:
reg:=TRegistry.Create(KEY_READ);
вроде чтобы получить доступ для записи надо иметь определенные привелегии и то запись произойдет при перезапуске системы.
его надо открывать для чтения:
[/code][/QUOTE]
Мне нужно ещё ,чтобы и удалять ключи/параметры можно было
вот глянь тут с доступом KEY_WRITE просто сначала надо сделать чтобы у твоей проги была привелегия SeRestorePrivilege. попробуй вроде теперь должно получаться манипулировать с данным ключом.
function EnablePrivilege
достаточно было прописать
reg:=TRegistry.Create(KEY_WRITE);
Кстати, саму функцию EnablePrivilege вроде бы разобрал, но поверхностно...нашёл описание всего ,что там есть, в базе MSDN...вроде перевёл...но это только для понятитя общего. Хотелось бы поподробнее узнать описание написанной вами функции. Может бытЬ, выложите комментарии. Запомнится лучше.
HKEY_LOCAL_MACHINE\SECURITY
EnablePrivilege выдаёт TRUE...но ключ не открывается.
:((
Попытка прописать reg:=TRegistry.Create(KEY_READ) ни к чему новому не привела
открой этот ключ в regedit.exe и нажми на нём правой кнопкой мыши, выбери пункт резрешения - увидишь почему не можешь открыть тот или иной ключ. вообщем может читать и писать прога, которая была запущена SYSTEM. или же можешь внести себя в список и тогда твоя прога будет делать с этим ключом все что вздумается, но только на твоем компе.
А программно нельзя изменять эти права доступа ?? Программа пишется для себя....но ради интереса....
вроде надо, чтобы твоя прога была сервисом, тогда она может быть запущена от имени SYSTEM ну и иметь полный доступ к реестру, тока надо правильно её проинсталлить.
проблема с разного рода ключами наподобии
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 - его подключи не открываются...
Помогите ,плз !
а у меня прекрасно открываются с разрешениями по умочанию, причем с KEY_WRITE.
при KEY_WRITE вроде бы подветки открываются, типа {3DA165B6-CC41-11d2-BDC6-00C04F79EC6B}....но не вызывается моя рекурсивнаяфункция, работающая с этим ключом. Хотя с остальными работает :( .
В общем ладно, видать не судьба моей программе лезть в такие ключи. Сделаю просто поиск по тем ключам, где это возможно :)