Ver Mensaje Individual
  #6  
Antiguo 26-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por martonbarbosa Ver Mensaje
Ahora... mi duda, como puedo hacer que los numeros contenidos en esta linea: "'HARDWARE\DEVICEMAP\Scsi\Scsi Port 2\Scsi Bus 0\Target Id 1\Logical Unit Id 0\'" aumenten solos... digamos que recorra el registro 1 a 1 hasta encontrar el valor "Identifier"??? se entiende???

Ejemplo:
'HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0\'
'HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 1\Target Id 1\Logical Unit Id 1\'
etc, hasta que encuentre el valor "identifier"
Hola.

Por lo que entiendo de tu mensaje, el valor a buscar se encuentra en los nodos hijos de la clave a buscar ('DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0'.

Entonces podrías hacer:
Código Delphi [-]
function SearchValueName(const RKEY: HKEY; const SUBKEY, Searched: string): string;
var
  rd     : TRegDataInfo;
  st     : string;
  i,sz   : Integer;
  KNames,
  VNames : TStrings;
begin
  KNames := TStringList.Create;
  VNames := TStringList.Create;
  with TRegistry.Create do
  try
    RootKey := RKEY;
    if OpenKeyReadOnly(SUBKEY) then
    begin
      GetKeyNames(KNames);
      for i:= 0 to KNames.Count - 1 do
      begin
        CloseKey;
        OpenKeyReadOnly(SUBKEY + '\' + KNames[i]);
        GetValueNames(VNames);
        if VNames.IndexOf(Searched) <> -1 then
        begin
          GetDataInfo(Searched, rd);
          case rd.RegData of
            rdUnknown: Result := '';
            rdInteger: Result := IntToStr(ReadInteger(Searched));
            rdString , rdExpandString: Result := ReadString(Searched);
            rdBinary : begin
                         sz := GetDataSize(Searched);
                         SetLength(st, sz);
                         ReadBinaryData(Searched, PChar(st)^, sz);
                         Result := st;
                       end
          end
        end
      end
    end
  finally
    KNames.Free;
    VNames.Free;
  end;
end;
La función busca el nombre buscado (Searched) en los nodos hijos del argumento enviado en el parámetro SUBKEY. Si lo encuentra lee el valor y lo devuelve como string, en caso contrario devuelve cadena vacía

Llamada ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(SearchValueName(HKEY_LOCAL_MACHINE,
                'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
                'MicrosoftRedirectionURL'));
end;

En tu caso creo que sería:
Código Delphi [-]
  SearchValueName(HKEY_LOCAL_MACHINE,
                  'HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0',
                  'Identifier');

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita