|
|
Регистрация | << Правила форума >> | 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, только в родительской папке реестра... THE CRACKER IS OUT THERE |
#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; THE CRACKER IS OUT THERE Последний раз редактировалось 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; А вообще, процесс обучения на том и основан, чтобы человек сам пробовал, экспериментировал и методом проб и ошибок учился новым вещам. Ибо, если тебе всегда будут давать готовые куски кодов, далеко в программерском деле ты не уедешь THE CRACKER IS OUT THERE Последний раз редактировалось 4kusNick, 18.07.2007 в 15:54. |
#8
|
|||
|
|||
.
Вопрос такой. Имеется ключ реестра в шестнадцатеричном виде. Необходимо прочесть большие числа. Например 40000. readinteger не катит естественно. Или как считать его в десятичном виде? Заранее сенкс
|