Главная страница
    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
14-58881
chs2r
2003-08-29 17:50
2003.09.18
Матричные преобразования


1-58733
Dilezzz
2003-09-07 14:48
2003.09.18
Чтение из файла. В чем ошибка?


1-58674
Dmitriy M. Volkov
2003-09-03 22:05
2003.09.18
высота taskbar


3-58542
Mikle
2003-08-28 10:01
2003.09.18
Проблема с Query в Delhi4


4-58979
DimaS
2003-07-17 13:42
2003.09.18
Как проинсталлировав файл шрифта, затем что то им написать?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский