Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];

Вниз

Как прочитать значение 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-58761
Sniffer
2003-09-06 12:39
2003.09.18
Изминение Security Attributes файла


14-58851
Rouse_
2003-08-31 04:17
2003.09.18
Лог загрузки одной фотографии


1-58665
Дмитрий В. Белькевич
2003-09-04 16:35
2003.09.18
Печать bitmap на canvas принтера.


1-58750
Overlord
2003-09-06 22:46
2003.09.18
Вопрос про звук!


1-58646
ikivio
2003-09-05 11:59
2003.09.18
PageControl в режиме RunTime





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский