![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реестр: чтение REG_MULTI_SZ [D5, Win95/98, WinME, NT4, Win2k, WinXP]
XAOC © (2003-04-21 06:33:00)Приветствую Вас, Мастера!
Кто-нибудь знает как прочитать из реестраключи типа REG_MULTI_SZ? Всмысле заталкать его куда-нибудь типа TStringList.
XAOC (2003-04-23 16:40:00) [1]Ihor Osov"yak (23.04.03 15:42)
Ну дык это-ж дело поправимое :)
Ihor Osov'yak (2003-04-23 15:42:00) [2]2 XAOC (23.04.03 13:32)
Молодец. Прочитай своей функцией REG_MULTI_SZ, длиннее чем 100 байт..
XAOC (2003-04-23 13:32:00) [3]Спасибо!
А я нашел функцию попроще:
function ReadMultirowKey(reg: TRegistry; Key: string): TStrings;
const bufsize = 100;
var
i: integer;
s1: string;
sl: TStringList;
bin: array[1..bufsize] of char;
begin
try
result := nil;
sl := nil;
sl := TStringList.Create;
if not Assigned(reg) then
raise Exception.Create("TRegistry object not assigned.");
FillChar(bin,bufsize,#0);
reg.ReadBinaryData(Key,bin,bufsize);
i := 1;
s1 := "";
while i < bufsize do
begin
if ord(bin[i]) >= 32 then
s1 := s1 + bin[i]
else
begin
if Length(s1) > 0 then
begin
sl.Add(s1);
s1 := "";
end;
end;
inc(i);
end;
result := sl;
except
sl.Free;
raise;
end;
end;
Ihor Osov'yak (2003-04-21 12:34:00) [4]
type
TExRegistry = class(TRegistry)
function ReadStrings(const valueName: string):string;
end;
function TExRegistry.ReadStrings(const valueName: string):string;
var
valueType : DWORD;
valueLen : DWORD;
p, buffer : PChar;
begin
result:="";
SetLastError (RegQueryValueEx (CurrentKey, PChar (valueName), Nil,
@valueType, Nil, @valueLen));
if GetLastError = ERROR_SUCCESS then
if valueType = REG_MULTI_SZ then
begin
GetMem (buffer, valueLen);
try
RegQueryValueEx (CurrentKey, PChar (valueName), Nil, Nil, PBYTE (buffer), @valueLen);
p := buffer;
while p^ <> #0 do
begin
if result<>"" then result:=result+#13#10;
result:=result+p;
Inc (p, lstrlen (p) + 1)
end
finally
FreeMem (buffer)
end
end
else
raise ERegistryException.Create ("String list expected")
else
raise Exception.Create (
"Unable read MULTI_SZ value")
end;
Cobalt (2003-04-21 11:22:00) [5]Стандартной функции, насколько я знаю, нет. Видимо, придется ручками буфер проверять...