Ler Registro do Windows com Variáveis REG_MULTI_SZ

Como disse em post anteriores as APIs do Windows são uma mão na roda.

É possível ler registros do Windows, mas em particular ler um tipo de variável REG_MULTI_SZ não é tão simples assim, então vamos ao código de uma procedure para fazer essa tarefa:

 unit Unit1;  
 interface  
 uses  
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  Dialogs, Registry, StdCtrls;  
 type  
  TForm1 = class(TForm)  
   Button1: TButton;  
   procedure Button1Click(Sender: TObject);  
  private  
   { Private declarations }  
  public  
   { Public declarations }  
  end;  
 var  
  Form1: TForm1;  
  registro: TStringList;  
 implementation  
 {$R *.dfm}  
 Procedure Le_Registro_REG_MULTI_SZ (const CurrentKey: HKey; const Subkey, ValueName: String; Strings: TStrings);  
 var  
  valueType: DWord;  
  valueLen: DWord;  
  p, buffer: PChar;  
  key : HKEY;  
 begin  
  // Limpar a lista de Strings  
  Strings.Clear;  
  // Abrir uma chave especificada  
  if RegOpenKeyEx (CurrentKey, PChar (SubKey), 0, KEY_READ, key) = ERROR_SUCCESS then  
  begin  
   // Recuperando tipo de dados e dados do valor especificadao no REGISTRY  
   SetLastError (RegQueryValueEx (key, Pchar(ValueName), nil, @valueType, nil, @valueLen));  
   if GetLastError = ERROR_SUCCESS then  
   begin  
    GetMem (buffer, valueLen);  
    try  
     // Recebendo os valos de dados em um array  
     RegQueryValueEx (key, Pchar(ValueName), nil, nil, PBYTE(buffer), @valueLen);  
     // Adicionando os valores em um TStringList  
     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 ('É necessário informar um TStringList...')  
  end  
  else  
   raise ERegistryException.Create ('Não é possível ler valores MULTI_SZ...');  
 end;  
 procedure TForm1.Button1Click(Sender: TObject);  
 begin  
  registro := TStringlist.Create;  
  Le_Registro_REG_MULTI_SZ (HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Microsoft SQL Server', 'InstalledInstances', registro);  
 end;  
 end.  

Nenhum comentário:

Postar um comentário