Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.07.2007, 10:48
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
Вопрос Как в программе выбрать следующую папку реестра?

Как в программе (программно) выбрать следующую папку реестра? Например: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  
Старый 18.07.2007, 12:14
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Так, следующую в смысле вложенную, или соседнюю?
Если вложенную, то используй RegEnumKey или RegEnumKeyEx для получания списка вложенных ключей текущего ключа и по этому списку циклом уже можно пройтись, например. А если ты имел ввиду соседнюю папку, то аналогично используй RegEnumKey или RegEnumKeyEx, только в родительской папке реестра...
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
  #3  
Старый 18.07.2007, 14:02
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

Я имею ввиду вложенную. Не мог бы мне дать код, в общих чертах я понял о чём ты говоришь, но в код это реализовать не могу, сможешь дать код? Кровь из носа как нада
Ответить с цитированием
  #4  
Старый 18.07.2007, 14:21
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Можно в принципе, вот так:
Код:
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  
Старый 18.07.2007, 15:34
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

Твой второй вариант мне практически подошёл, но одно большое НО - мне нужно узнать названия подпапок только под Software\Microsoft\Windows\CurrentVersion\Explorer \ComDlg32\OpenSaveMRU\ другие папки мне не нужны, то есть искать нужно только в разделе OpenSaveMRU , не мог бы ты мне дать код?
Ответить с цитированием
  #6  
Старый 18.07.2007, 15:44
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

Извини, 4KusNick, я уже понял как это сделать, можешь не объяснять, огромные пасибки
Ответить с цитированием
  #7  
Старый 18.07.2007, 15:47
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
Подмигивание

Может, так?

Код:
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  
Старый 01.09.2007, 01:24
Wolverine Wolverine вне форума
Прохожий
 
Регистрация: 26.06.2007
Сообщения: 11
Репутация: 10
По умолчанию .

Вопрос такой. Имеется ключ реестра в шестнадцатеричном виде. Необходимо прочесть большие числа. Например 40000. readinteger не катит естественно. Или как считать его в десятичном виде? Заранее сенкс
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter