Cita:
Empezado por martonbarbosa
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.