![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Как в программе (программно) выбрать следующую папку реестра? Например:HKEY_CURRENT_USER есть папка Software , а в ней есть папка Microsoft , в ней есть папка WIndows , а в ней есть папка CurrentVersion , а в ней есть папка Explorer , а в ней есть папка ComDlg32 , а в ней есть папка OpenSaveMRU , так вот: мне нужно чтобы программа выбирала строго следующую папку и записывала путь до этой папки в реестре в переменную, например - переменная v типа string
Пример: v:='Software\Microsoft\Windows\CurrentVersion\Expl orer\ComDlg32\ OpenSaveMru\avi' Help me people! |
|
#2
|
||||
|
||||
|
Так, следующую в смысле вложенную, или соседнюю?
Если вложенную, то используй RegEnumKey или RegEnumKeyEx для получания списка вложенных ключей текущего ключа и по этому списку циклом уже можно пройтись, например. А если ты имел ввиду соседнюю папку, то аналогично используй RegEnumKey или RegEnumKeyEx, только в родительской папке реестра... |
|
#3
|
||||
|
||||
|
Я имею ввиду вложенную. Не мог бы мне дать код, в общих чертах я понял о чём ты говоришь, но в код это реализовать не могу, сможешь дать код? Кровь из носа как нада
|
|
#4
|
||||
|
||||
|
Можно в принципе, вот так:
Код:
uses Registry;
// Количество вложенных ключей и значений
procedure TForm1.Button1Click(Sender: TObject);
const
sKey = '\SOFTWARE\Microsoft\Windows\CurrentVersion';
var
rReg: TRegistry;
ki: TRegKeyInfo;
begin
rReg := TRegistry.Create;
with rReg do
begin
RootKey := HKEY_LOCAL_MACHINE;
if KeyExists(sKey) then
begin
OpenKey(sKey, false);
GetKeyInfo(ki);
CloseKey;
lbSubkeys.Caption := IntToStr(ki.NumSubKeys);
lbValues.Caption := IntToStr(ki.NumValues);
end;
end;
rReg.Free;
end;Или так: Код:
{
This example demonstrates how to enumerate all registry keys from
a certain key (here: HKEY_CURRENT_USER)
}
uses
Registry;
procedure TForm1.Button1Click(Sender: TObject);
var
indent: Integer;
procedure EnumAllKeys(hkey: THandle);
var
l: TStringList;
n: Integer;
begin
Inc(indent, 2);
with TRegistry.Create do
try
RootKey := hkey;
OpenKey(EmptyStr, False);
l := TStringList.Create;
try
GetKeynames(l);
CloseKey;
for n := 0 to l.Count - 1 do
begin
memo1.Lines.Add(StringOfChar(' ', indent) + l[n]);
if OpenKey(l[n], False) then
begin
EnumAllKeys(CurrentKey);
CloseKey;
end;
end;
finally
l.Free
end;
finally
Free;
end;
Dec(indent, 2);
end;
begin
Memo1.Clear;
Memo1.Lines.Add('Keys under HKEY_CURRENT_USER');
indent := 0;
Memo1.Lines.BeginUpdate;
try
EnumAllKEys(HKEY_CURRENT_USER);
finally
Memo1.Lines.EndUpdate;
end;
end;Последний раз редактировалось 4kusNick, 18.07.2007 в 14:23. |
|
#5
|
||||
|
||||
|
Твой второй вариант мне практически подошёл, но одно большое НО - мне нужно узнать названия подпапок только под Software\Microsoft\Windows\CurrentVersion\Explorer \ComDlg32\OpenSaveMRU\ другие папки мне не нужны, то есть искать нужно только в разделе OpenSaveMRU , не мог бы ты мне дать код?
|
|
#6
|
||||
|
||||
|
Извини, 4KusNick, я уже понял как это сделать, можешь не объяснять, огромные пасибки
|
|
#7
|
||||
|
||||
|
Может, так?
Код:
uses Registry;
procedure TForm1.Button1Click(Sender: TObject);
const
sKey = '\Software\Microsoft\Windows\CurrentVersion\Explorer \ComDlg32\OpenSaveMRU';
var
rReg: TRegistry;
ki: TRegKeyInfo;
begin
rReg := TRegistry.Create;
with rReg do
begin
RootKey := HKEY_LOCAL_MACHINE;
if KeyExists(sKey) then
begin
OpenKey(sKey, false);
GetKeyInfo(ki);
CloseKey;
lbSubkeys.Caption := IntToStr(ki.NumSubKeys);
lbValues.Caption := IntToStr(ki.NumValues);
end;
end;
rReg.Free;
end;А вообще, процесс обучения на том и основан, чтобы человек сам пробовал, экспериментировал и методом проб и ошибок учился новым вещам. Ибо, если тебе всегда будут давать готовые куски кодов, далеко в программерском деле ты не уедешь ![]() Последний раз редактировалось 4kusNick, 18.07.2007 в 15:54. |
|
#8
|
|||
|
|||
|
Вопрос такой. Имеется ключ реестра в шестнадцатеричном виде. Необходимо прочесть большие числа. Например 40000. readinteger не катит естественно. Или как считать его в десятичном виде? Заранее сенкс
|