![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение из реестра переменных с типом REG_MULTI_SZ [D7, WinXP]
Trimp © (2005-07-18 21:13:00)Здравствуйте мастера. Как можно прочитать из реестра переменную (defaultGateway), у которой тип REG_MULTI_SZ (многострочный текст)?
Заранее спасибо.
Trimp (2005-07-18 23:09:00) [1]2 Джо
Спасибо, нашёл свою ошибку. При проверке ReadBinaryData неправильно указывал третий атритбут (у тебя Sz).
Джо (2005-07-18 22:34:00) [2]
> [3] Trimp © (18.07.05 21:39)
Ну вот, зачем обманывать, сам же написалReadBinaryData. Именно при помощи этого метода и читать.
Некогда переписывать на АПИ, но, с использованиемTRegistryвыглядеть будет примерно так.
//Класс-наследник от TRegistry, добавляющий новый метод чтения значений типа REG_MULTI_SZ
type
TRegistryEx = class (TRegistry)
private
public
function ReadLines (const KeyName: string; AStrings: TStrings): Integer;
end;
///
implementation
function TRegistryEx.ReadLines(const KeyName: string; AStrings: TStrings): Integer;
var
Buff: array of Char;
I, Sz: Cardinal;
Ch,PrevCh: Char;
S: string;
begin
Result := 0;
AStrings.Clear;
Sz := GetDataSize(KeyName);
SetLength (Buff,Sz);
ReadBinaryData(KeyName,Buff[0],Sz);
// parse data
PrevCh := #0;
S := '';
for I := 0 to Sz do
begin
Ch := Buff[I];
if (Ch=#0) and (PrevCh=#0) then
Break;
if (Ch=#0) then
begin
AStrings.Add(S);
S := '';
end
else
S := S + Ch;
PrevCh := Ch;
end;
Result := AStrings.Count
end;
------------------------------
Пример использования
------------------------------
procedure TForm3.Button1Click(Sender: TObject);
var
RegEx: TRegistryEx;
Lst: TStrings;
I: Integer;
begin
RegEx := TRegistryEx.Create;
try
RegEx.RootKey := HKEY_LOCAL_MACHINE;
RegEx.OpenKey('SOFTWARE\NEW_SECTION',False);
Lst := TStringList.Create;
try
RegEx.ReadLines('key1',Lst);
for I := 0 to Lst.Count-1 do
ShowMessage (Lst[I])
finally
Lst.Free;
end;
finally
RegEx.Free;
end;
end;
Anatoly Podgoretsky (2005-07-18 22:09:00) [3]Что ты сделал для разрешения проблемы?
Как собираешься решать, от этого зависит и форум.
Trimp (2005-07-18 22:04:00) [4]2 Anatoly Podgoretsky
Ок, возможно я ошибся, в каком подфоруме мой вопрос будет уместней?
И всё же по существу кто-то может ответить?
Fay (2005-07-18 21:44:00) [5]2 Trimp © (18.07.05 21:39) [3]
Я не могу тебе помочь так как
1) Я не помню все API наизусть
2) Я не стану вспоминать с (делая, кстати, то, что я и посоветовал) специально для тебя.
3) Невозможно помочь тому, кто ничего не делает.
спасибо за внимание.
Anatoly Podgoretsky (2005-07-18 21:43:00) [6]А при чем тут TRegistry и WinAPI?
Trimp (2005-07-18 21:42:00) [7]2 Anatoly Podgoretsky
Умею читать String,byte,boolean,float,Integer и остальные перечисленные в [3]
Trimp (2005-07-18 21:39:00) [8]2 Fay
Спасибо, здорово помогли уже во второй раз. Мне кажется, что такой совет эквивалентен ответу:"Не знаю". Я, когда не знаю, спрашиваю, вот и в этот раз сначала проверил все типы READ в исходниках TRegistry:
reg.ReadCurrency()
reg.ReadBinaryData()
reg.ReadBool()
reg.ReadDate()
reg.ReadDateTime()
reg.ReadFloat()
reg.ReadInteger()
reg.ReadString()
reg.ReadTime()
и не один из них не может читать REG_MULTI_SZ.
Anatoly Podgoretsky (2005-07-18 21:26:00) [9]Trimp © (18.07.05 21:13)
Ты другие то типы читать умеешь?
Fay (2005-07-18 21:24:00) [10]2 Trimp © (18.07.05 21:13)
В левую руку возьми исходники TRegistry
Правой жми на F1.
Максимум через час тебе будет Щястье.