Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.18;
Скачать: CL | DM;

Вниз

Как прочитать значение REG_MULTI_SZ?   Найти похожие ветки 

 
CKOTu   (2003-07-02 17:26) [0]

я что то парюсь, вроде REG_SZ т.е. ReadString(...) должен читать и MULTI_SZ, но не хочет.

делаю так:

Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey("\SYSTEM\CurrentControlSet\Services\{37CF46B1-8512-447A-9437-80E01E7149F4}\Parameters\Tcpip", False)
then Result:= Reg.ReadString("IPAddress");
finally
Reg.CloseKey;
Reg.Free;
end;

tnx


 
Cobalt ©   (2003-07-02 19:27) [1]

И чё ты паришься? ReadBinaryData
Размер знаешь, память выделяешь... И вперёд!


 
NoDoubt   (2003-07-04 00:43) [2]

Здрасти! :) Многоуважаемый Cobalt а если размер не знаешь? Я предлагаю другой способ WinApi функцию RegEnumValue! В Delphi
есть справка Windows SDK там все написано!


 
Cobalt ©   (2003-07-04 13:45) [3]

Известен максимальный размер параметра.
Да, согласен - в стандартном компоненте нет всей функциональности, только самая простая - а что вы таки хотели? Всё и сразу? :)
Но, зато у вас есть ручки.
Ну, на крайний случай, можно на Торри поискать - там такого добра навалом.


 
CKOTu   (2003-07-08 12:07) [4]

Спасибо, мы пойдем дригим путем:

function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; pOutBufLen: PULONG): DWORD; stdcall; external "Iphlpapi.dll" name "GetAdaptersInfo";


 
CKOTu   (2003-07-08 12:17) [5]

сложно было написать что то типа:

function RegGetValue(RootKey: HKEY; Name: String; ValType: Cardinal; var PVal: Pointer; var ValSize: Cardinal): boolean;
var
SubKey: String;
n: integer;
MyValType: DWORD;
hTemp: HKEY;
Buf: Pointer;
BufSize: Cardinal;
PKey: PChar;
begin
Result := False;
n := LastPos("\", Name);
if n > 0 then
begin
SubKey := Copy(Name, 1, n - 1);
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
SubKey := Copy(Name, n + 1, Length(Name) - n);
if SubKey = "" then
PKey := nil
else
PKey := PChar(SubKey);
if RegQueryValueEx(hTemp, PKey, nil, @MyValType, nil, @BufSize) = ERROR_SUCCESS then
begin
GetMem(Buf, BufSize);
if RegQueryValueEx(hTemp, PKey, nil, @MyValType, Buf, @BufSize) = ERROR_SUCCESS then
begin
if ValType = MyValType then
begin
PVal := Buf;
ValSize := BufSize;
Result := True;
end else
begin
FreeMem(Buf);
end;
end else
begin
FreeMem(Buf);
end;
end;
RegCloseKey(hTemp);
end;
end;
end;

function RegGetMultiString(RootKey: HKEY; Name: String; Var Value: String): boolean;
var
Buf: Pointer;
BufSize: Cardinal;
begin
Result := False;
Value := "";
if RegGetValue(RootKey, Name, REG_MULTI_SZ, Buf, BufSize) then
begin
Dec(BufSize);
SetLength(Value, BufSize);
if BufSize > 0 then
Move(Buf^, Value[1], BufSize);
( Buf) сложно было написать что то типа:

function RegGetValue(RootKey: HKEY; Name: String; ValType: Cardinal; var PVal: Pointer; var ValSize: Cardinal): boolean;
var
SubKey: String;
n: integer;
MyValType: DWORD;
hTemp: HKEY;
Buf: Pointer;
BufSize: Cardinal;
PKey: PChar;
begin
Result := False;
n := LastPos("\", Name);
if n > 0 then
begin
SubKey := Copy(Name, 1, n - 1);
if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then
begin
SubKey := Copy(Name, n + 1, Length(Name) - n);
if SubKey = "" then
PKey := nil
else
PKey := PChar(SubKey);
if RegQueryValueEx(hTemp, PKey, nil, @MyValType, nil, @BufSize) = ERROR_SUCCESS then
begin
GetMem(Buf, BufSize);
if RegQueryValueEx(hTemp, PKey, nil, @MyValType, Buf, @BufSize) = ERROR_SUCCESS then
begin
if ValType = MyValType then
begin
PVal := Buf;
ValSize := BufSize;
Result := True;
end else
begin
FreeMem(Buf);
end;
end else
begin
FreeMem(Buf);
end;
end;
RegCloseKey(hTemp);
end;
end;
end;

function RegGetMultiString(RootKey: HKEY; Name: String; Var Value: String): boolean;
var
Buf: Pointer;
BufSize: Cardinal;
begin
Result := False;
Value := "";
if RegGetValue(RootKey, Name, REG_MULTI_SZ, Buf, BufSize) then
begin
Dec(BufSize);
SetLength(Value, BufSize);
if BufSize > 0 then
Move(Buf^, Value[1], BufSize);
FreeMem(Buf);
Result := True;
end;
end;

чем флейм разводить?


 
Cobalt ©   (2003-07-08 16:22) [6]

> сложно было написать что то типа:
А зачем - ты и так это уже понял. ч.т.д.



Страницы: 1 вся ветка

Текущий архив: 2003.09.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
3-58588
Cuckoo
2003-08-26 18:40
2003.09.18
ПОМОГИТЕ НОВИЧКУ!!!


11-58607
Nwm
2003-01-06 10:15
2003.09.18
Иконку из Imagelist в ТKOLMainMenu, без всяких там... штучек.


8-58786
ProgrammSoft
2003-05-19 11:10
2003.09.18
Звук


6-58814
Ossa
2003-07-15 15:18
2003.09.18
у меня вопрос по удаленному доступу через модем


1-58728
Modus
2003-09-07 09:46
2003.09.18
Оптимизировать по скорости