5 / 5 / 0
Регистрация: 26.04.2012
Сообщений: 36
1

Считать значение REG_MULTI_SZ из реестра.

05.05.2012, 15:53. Показов 4216. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В инете везде приводится одна и та же статья где предлагают три разных способа.
Проблема в том что все они, используюя класс Tregistry, ни один толком не работают, вечно какие то ошибки выдают, или просто очень громоздки....
Хотелось бы окончательно убедится что нет простого способа считать данные хотя бы только одной первой строки из мультистрокового ключа реестра как это делается в одностроковых ключах

пример
Result := reg.ReadString('SystemBiosDate');
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2012, 15:53
Ответы с готовыми решениями:

Как считать и присвоить значение реестра полю Edit.Text на форме приложения.
Не могу дать ума. Проблема в следующем. Приложение (форма с полем Edit1.Text). Нужно сделать так,...

Считать с реестра пары параметр-значение
Есть определенный путь например HKEY_CLASSES_ROOT\Installer\Products, как считать все пары...

Считать значение реестра из локальной сети
то есть из компьютера подключенного по локальной сети. как то возможно? в частности в C#?

Как считать из реестра значение параметра, который имеет тип REG_EXPAND_SZ?
Друзья! Тип REG_EXPAND_SZ в реестре это очень хитрый тип,называется "Расширяемый строковый...

2
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
05.05.2012, 20:10 2
Лучший ответ Сообщение было отмечено helgboy как решение

Решение

диагноз : автор не умеет работать с классом TRegistry.

Добавлено через 1 час 44 минуты
Используем модуль RegistryExt, расширяющий возможности TRegistry

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
unit RegistryExt;
{$R-,T-,H+,X+}
 
// скачан с
// [url]http://www.delphisources.ru/pages/faq/base/ex_tregistry.html[/url]
 
// подправлен
// [email]alexpac26@yandex.ru[/email] май 2012
 
interface
 
uses Registry, Classes, Windows, Consts, SysUtils;
 
type
 
  TRegistry = class(Registry.TRegistry)
  public
    function ReadStringList(const name: string):TStringList;
    procedure WriteStringList(const name: string; list: TStringList);
  end;
 
implementation
 
//*** TReg *********************************************************************
//------------------------------------------------------------------------------
// Запись TStringList ввиде значения типа REG_MULTI_SZ в реестр
//------------------------------------------------------------------------------
 
procedure TRegistry.WriteStringList(const name: string; list: TStringList);
var
 
  Buffer: Pointer;
  BufSize: DWORD;
  i, j, k: Integer;
  s: string;
  p: PChar;
begin
 
  {подготовим буфер к записи}
  BufSize := 0;
  for i := 0 to list.Count - 1 do
    inc(BufSize, Length(list[i]) + 1);
  inc(BufSize);
  GetMem(Buffer, BufSize);
  k := 0;
  p := Buffer;
  for i := 0 to list.Count - 1 do
  begin
    s := list[i];
    for j := 0 to Length(s) - 1 do
    begin
      p[k] := s[j + 1];
      inc(k);
    end;
    p[k] := chr(0);
    inc(k);
  end;
  p[k] := chr(0);
 
  {запись в реестр}
  if RegSetValueEx(CurrentKey, PChar(name), 0, REG_MULTI_SZ, Buffer,
    BufSize) <> ERROR_SUCCESS then
    raise Exception.Create('Error RegistryExt Write Param '+name);
end;
//------------------------------------------------------------------------------
// Чтение TStringList ввиде значения типа REG_MULTI_SZ из реестра
//------------------------------------------------------------------------------
 
function TRegistry.ReadStringList(const name: string):TStringList;
var
 
  BufSize,
    DataType: DWORD;
  Len, i: Integer;
  Buffer: PChar;
  s: string;
begin
 
  result:=TStringList.Create;
 
  Len := GetDataSize(Name);
  if Len < 1 then
    Exit;
  Buffer := AllocMem(Len);
  if Buffer = nil then
    Exit;
  try
    DataType := REG_NONE;
    BufSize := Len;
    if RegQueryValueEx(CurrentKey, PChar(name), nil, @DataType, PByte(Buffer),
      @BufSize) <> ERROR_SUCCESS then
      //raise ERegistryException.CreateResFmt(@SRegGetDataFailed, [name]);
      raise Exception.Create('Error RegistryExt Get Data Failed on '+name);
    if DataType <> REG_MULTI_SZ then
      //raise ERegistryException.CreateResFmt(@SInvalidRegType, [name]);
      raise Exception.Create('Error RegistryExt Invalid RegType on '+name);
    {запись в TStringList}
    s := '';
    for i := 0 to BufSize - 2 do
    begin // BufSize-2 т.к. последние два нулевых символа
      if Buffer[i] = chr(0) then
      begin
        result.Add(s);
        s := '';
      end
      else
        s := s + Buffer[i];
    end;
  finally
    FreeMem(Buffer);
  end;
end;
 
end.
пример кода:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.Button1Click(Sender: TObject);
var r:TRegistry; s:TStringList;
begin
  r:=TRegistry.Create;
  r.RootKey:=HKEY_CURRENT_USER;
  r.OpenKeyReadOnly('Volatile Environment');
  r.OpenKeyReadOnly('1');
  s:=r.ReadStringList('hellowolrd'); // запись в S (TStringList) параметра REG_MULTI_SZ
  Memo1.Text:=s.Text; 
  s.free;
  r.Free;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var r:TRegistry; //s:TStringList;
begin
  r:=TRegistry.Create;
  r.RootKey:=HKEY_CURRENT_USER;
  r.OpenKeyReadOnly('Volatile Environment');
  r.OpenKeyReadOnly('1');
  // Запись в параметр реестр значение мемо поля
  r.WriteStringList('hellowolrd',TStringList(memo1.lines));
  r.Free;
end;
1
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 2
10.09.2015, 00:50 3
!@#
0
10.09.2015, 00:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2015, 00:50
Помогаю со студенческими работами здесь

Как получить и изменить в реестре значение типа REG_MULTI_SZ
Находил примеры с работой с ключами, чтением и записи DWORD и STRING из реестра, но нужно прочесть...

Записать - считать с реестра
вот пишу procedure SaveConnectionString(AconnectionString:string); var Reg:TRegistry; begin ...

Считать параметры из указанной папки реестра
Всем здравствуйте! Задача в следующем - прочитать все параметры из указанной папки в реестре. Все...

Считать SHA1 пароль из реестра базы Access
Добрый день! Записываю в реестр пароль от базы ACCESS в явном виде (не шифрованный) все считывает....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru