Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Просмотр и модификация ветки реестра


Автор: vicq 8.2.2008, 15:54
как реализовать просмотр и модификацию какой-либо ветки реестра?

Автор: Riply 9.2.2008, 01:32
Цитата(vicq @  8.2.2008,  15:54 Найти цитируемый пост)
как реализовать просмотр и модификацию какой-либо ветки реестра?


Слишком общий вопрос. 
Смотри в сторону RegApi.

Автор: vicq 17.2.2008, 20:57
мне нужна HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
просмотр и модификация
и ещё 
HKEY_USERS/[UserSecurityID]/SOFTWARE/Microsoft/Windows/CurrentVersion/Run

и что такое UserSecurityID ?

я использую RegOpenKey чтобы открыть, нужна функция которая по ключу извлекает название ветки, подскажите? я хочу всё это в TreeView запихнуть.. пока об изменении речи не идет)) мне бы только просмотр хотябы сделать)

Автор: Riply 17.2.2008, 22:09
Цитата(vicq @  17.2.2008,  20:57 Найти цитируемый пост)
я использую RegOpenKey чтобы открыть, нужна функция которая по ключу извлекает название ветки, подскажите? 


Не поняла.  У тебя есть Handle ключа и ты по нему хочешь получить его имя ?

Автор: vicq 17.2.2008, 23:05
имя ужо получил) теперь как отобразить содержимое ветки? в RUN есть 1 подузел и переменные, как их вывести?

Автор: Qu1nt 18.2.2008, 13:03
Получаем кол-во вложенных ключей и значений:
Код

procedure TForm1.Button1Click(Sender: TObject);
const
  KEY = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
var
  Reg : TRegistry;
  Inf : TRegKeyInfo;
begin
  Reg := TRegistry.Create;
  with Reg do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    if OpenKeyReadOnly(KEY) then
    begin
      GetKeyInfo(Inf);
      CloseKey;
      Self.Caption := Format('%d:%d', [Inf.NumSubKeys, Inf.NumValues]);
    end;
  finally
    Free;
  end;
end;

Автор: vicq 18.2.2008, 21:54
так выводится количество подузлов, и количество значений, а мне нужны имена значений..  GetValueNames вроде их получает в TStrings..  ток они не выводятся..
Код

procedure TForm1.Button1Click(Sender: TObject);
const
  KEY = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
var
  S: TStrings;
  Reg : TRegistry;
  Inf : TRegKeyInfo;
begin
  Reg := TRegistry.Create;
  with Reg do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    if OpenKeyReadOnly(KEY) then
      begin
        CloseKey;
        GetValueNames(S);
        for i:=0 to S.Count-1 do
          Memo1.Lines.Add(S.Strings[i]);
      end;
  finally
    Free;
end;


если честно не до конца понимаю работу с TRegistry
вот GetValueNames(S); будет искать значения в CurrentKey ??

Автор: Qu1nt 18.2.2008, 22:06
Код

procedure TForm1.Button1Click(Sender: TObject);
const
  KEY = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
var
  Reg : TRegistry;
begin
  Reg := TRegistry.Create;
  with Reg do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    if OpenKeyReadOnly(KEY) then
    begin
      GetValueNames(Memo1.Lines);
      CloseKey;
    end;
  finally
    Free;
  end;
end;

Ы?

Автор: vicq 18.2.2008, 22:19
ага, СПАСИБО!  терь надо вывести значения параметров и их тип...) в ValeuEditro тип не вписать? как это же можно в ValueListEditor запихнуть?

Автор: Qu1nt 18.2.2008, 22:49
Вместо ValueListEditor, я бы использовал TListView:
Код

procedure TForm1.Button1Click(Sender: TObject);
const
  KEY = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
var
  Reg      : TRegistry;
  DataType : TRegDataType;
  Values   : TStringList;
  i        : Integer;
begin
  Reg := TRegistry.Create;
  with Reg do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    if OpenKeyReadOnly(KEY) then
    begin
      Values := TStringList.Create;
      GetValueNames(Values);
      for i := 0 to Values.Count - 1 do
        with ListView1.Items.Add do
        begin
          Caption := Values[i];
          DataType := GetDataType(Values[i]);
          case DataType of
            rdString  :
              begin
                SubItems.Add('REG_SZ');
                SubItems.Add(Reg.ReadString(Values[i]));
              end;
            rdInteger :
              begin
                SubItems.Add('REG_DWORD');
                SubItems.Add('0x' + IntToHex(ReadInteger(Values[i]), 8));
              end;
            rdBinary  :
              begin
                SubItems.Add('REG_BINARY');
                SubItems.Add('Binary');
              end
          else
            SubItems.Add('n/a');
            SubItems.Add('n/a');
          end;
        end;
      CloseKey;
      Values.Free;
    end;
  finally
    Free;
  end;
end;

У ListView`a: ViewStyle - vsReport и три колонки (Name, Type, Value).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)