Содержание материала

 

 

Code:

uses

Registry;

 

procedure ReadREG_MULTI_SZ(const CurrentKey: HKey; const Subkey, ValueName: string;

Strings: TStrings);

var

valueType: DWORD;

valueLen: DWORD;

p, buffer: PChar;

key: HKEY;

begin

// Clear TStrings

Strings.Clear;

// open the specified key

if RegOpenKeyEx(CurrentKey,

                 PChar(Subkey),

                 0, KEY_READ, key) = ERROR_SUCCESS then

begin

   // retrieve the type and data for a specified value name

   SetLastError(RegQueryValueEx(key,

                PChar(ValueName),

                nil,

                @valueType,

                nil,

                @valueLen));

   if GetLastError = ERROR_SUCCESS then

     if valueType = REG_MULTI_SZ then

     begin

       GetMem(buffer, valueLen);

       try

         // receive the value's data (in an array).

         RegQueryValueEx(key,

                         PChar(ValueName),

                         nil,

                         nil,

                         PBYTE(buffer),

                         @valueLen);

         // Add values to stringlist

         p := buffer;

         while p^ <> #0 do

         begin

           Strings.Add(p);

           Inc(p, lstrlen(p) + 1)

         end

       finally

         FreeMem(buffer)

       end

     end

     else

       raise ERegistryException.Create('Stringlist expected/ String Liste erwartet...')

   else

     raise ERegistryException.Create('Cannot Read MULTI_SZ Value/'+

       'Kann den MULTI_SZ Wert nicht lesen...');

end;

end;

 

// Test it:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

ReadREG_MULTI_SZ(HKEY_CURRENT_USER, 'Software\XYZ', 'Test44', Memo1.Lines);

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить