Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2004
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Leer un registro del sistema multistring

Hola,

Tengo un procedimiento que lee los registros del sistema utilizando los TRegistry pero me he tropezado con registros de tipo multistring, los cuales contienen en un mismo registro varias cadenas de informacion distintas (path, value,...). El caso es que para estos registros la función ReadString no funciona.

¿Alguien sabe como puedo leer cada uno de los strings que componen ese registro?.

Muchas gracias
Responder Con Cita
  #2  
Antiguo 14-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Podrías darnos un ejemplo de este tipo de entradas para que podamos examinarlo?

// Saludos
Responder Con Cita
  #3  
Antiguo 14-07-2004
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Ejemplo

Por supuesto, si compartes una carpeta cualquiera o la conectas a una unidad de red, se genera en HKEY_LOCAL_MACHINE -> SYSTEM -> ControlSet001 -> Services -> lanmanserver -> Shares un registro de estas características para el recurso compartido. Me imagino que así lo podrás ver mejor que si lo escribo aqui manualmente.

Muchas gracias.
Responder Con Cita
  #4  
Antiguo 14-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ok. El tipo de datos es REG_MULTI_SZ, esto es, cadenas de caracteres separadas por nulos (#0).

Estuve viendo los métodos de TRegistry y al parecer no hay uno (o no lo he visto) para leer este tipo de datos.

Pero buscando se encuentra

Te pongo la siguiente rutina ReadStrings para leer un valor de este tipo del registro:

Código Delphi [-]
{
  Convierte una lista de cadenas separadas
  por nulos en una lista normal de cadenas.
}
procedure SzStringsToStrings(const SzStrings: String; Strings: TStrings);
var
  NullPos: Integer;
  S: String;

begin
  S := SzStrings;
  while S <> '' do
  begin
    NullPos := Pos(#0, S);
    if NullPos <> 0 then
    begin
      Strings.Add(S);
      Delete(S, 1, NullPos);
    end
    else
      break;
  end;
end;

{
  Similar a Win32Check pero para funciones que
  regresan un entero.
}
procedure CheckApi(RetVal: Integer);
begin
  if RetVal <> ERROR_SUCCESS then
    RaiseLastOSError;
end;

{
  Lee un valor multilínea del registro
}
procedure ReadStrings(Root: HKey; Key, Value: String; Strings: TStrings);
var
  Data: String;
  Size: Integer;

begin
  with TRegistry.Create do
    try
      RootKey := Root;

      if OpenKey(Key, false) then
      begin
        { Obtener el tamaño que ocupa el dato }
        CheckApi(RegQueryValueEx(CurrentKey, PChar(Value), nil, nil, nil, @Size));
        SetLength(Data, Size);

        { Leer el dato }
        CheckApi(RegQueryValueEx(CurrentKey, PChar(Value), nil, nil, @Data[1], @Size));

        { Convertir el dato a TStrings }
        SzStringsToStrings(Data, Strings);
      end;
    finally
      Free;
    end;
end;

Un ejemplo de uso:

Código Delphi [-]
var
  Key: String;
  Value: String;

begin
  Key := 'System\ControlSet001\Services\lanmanserver\Shares';
  ReadStrings(HKEY_LOCAL_MACHINE, Key, 'Documentos', Memo1.Lines);
end;

// Saludos
Responder Con Cita
  #5  
Antiguo 15-07-2004
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Muchisimas gracias

Muchas gracias, aunque como tu muy bien habias dicho, buscando se encuentra y eso es lo que hice y encontre un ejemplo similar al tuyo que tambien me soluciono el problema.

De todas formas, muchas gracias por el interes y perdon por las molestias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:38:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi