Delphi registry kulcsok - sub kulcsok
2011-08-06T16:45:48+02:00
2011-08-07T22:21:45+02:00
2022-08-15T17:20:34+02:00
kisspetya
Szia !

Egy registry kulcs Sub kulcsit szeretném megtalálni mert azokból kell adatokat kiolvasnom.
Sajnos nem megy :(
Amit eddig próbáltam:

procedure TForm1.Button1Click(Sender: TObject); begin Reg:= TRegistry.Create; sl := TStringList.Create; try Reg.RootKey:=HKEY_LOCAL_MACHINE; Reg.OpenKey('SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\NetworkCards',False); s:=Reg.CurrentPath; Reg.GetKeyNames(sl); for i:=1 to sl.Count do begin Reg.CloseKey; Reg.OpenKey(s + ''+sl[i-1],False); if Reg.ValueExists('valami') then ListBox1.Items.Add('Lan_kártya: '+Reg.ReadString('Description')); end; Finally end; end; end.

Gondom az, hogy az sl -be nem kerül be a sub kulcs, tehát a megnyitott SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\NetworkCards -hoz nem adja hozzá az abból megnyíló kulcsok nevét.

köszi !
Mutasd a teljes hozzászólást!
ez esetben egy másik sl listába fel kell venned a SYSTEM\ControlSet001Enum\PCIVEN_1002&DEV_4E48&SUBSYS_00021002&REV_00 alatt található kulcsneveket, majd egy másik for ciklussal azokat is megnyithatod a reg változóban...
Mutasd a teljes hozzászólást!

  • Kipróbáltam és nálam kiszedi a sub kulcsokat.

    Ebből viszont kimaradt a / jel a két érték közt, helyesen:
    Reg.OpenKey(s + '/' + sl[i-1], False);

    Ez nálam megnyitotta a
    SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\NetworkCards\8 kulcsot és ki is tudta olvasni belőle a Description értéket.
    Mutasd a teljes hozzászólást!
  • Megoldódott
    A Reg.ValueExists('Description') nem stimmelt
    Mutasd a teljes hozzászólást!
  • Most, hogy működik egy újabb gond adódott.
    Innen szeretnék kiolvasni
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\PCI
    viszont innen nem engedi.

    Az az elgondolás, hogy....

    Reg.OpenKey('SYSTEM\ControlSet001\Enum\PCI'); //innen indulva megkeresi a VEN_10EC&DEV_8169&SUBSYS_094C1462&REV_10\3&13c0b0c5&0&68 kulcsot amiben azonosítja a "Class = Net" és utána kiolvasom a DeviceDesc -t ezekből látnám, hogy Lan,Wlan,WWan kártyák vannak-e a PC -ben. Hogy tudnám ezt megoldani ? Üdv!
    Mutasd a teljes hozzászólást!
  • Ez is megoldódott, hozzáférési jogok okozták
    Mutasd a teljes hozzászólást!
  • Szia !
    Megint megállt a tudomány

    A "'SYSTEM\ControlSet001\Enum\PCI'" kulcs alkulcsát még megtudom nyitni, de annak az alkulcsát már nem. Tehát a ...\Enum\PCI' második alkulcsát.

    Próbáltam három for-ciklust egymásba ágyazni, de csak egy alkulcsot tudok megnyitni.

    s:=Reg.CurrentPath; Reg.GetKeyNames(sl); for i:=1 to sl.count do begin Reg.CloseKey; Reg.OpenKey(s + ''+ sl[i-1],False);

    Segítsetek légyszi
    Mutasd a teljes hozzászólást!
  • currentpath után kell egy \ -jel.
    Mutasd a teljes hozzászólást!
  • Ez igy van persze, csak a másolásnál kimaradt véletlen.
    'per' nélkül semmit nem olvasna ki.
    Reg.OpenKey(s + ''+ sl[i-1],False);
    Gond nem ez volt :(
    Mutasd a teljes hozzászólást!
  • ez esetben egy másik sl listába fel kell venned a SYSTEM\ControlSet001Enum\PCIVEN_1002&DEV_4E48&SUBSYS_00021002&REV_00 alatt található kulcsneveket, majd egy másik for ciklussal azokat is megnyithatod a reg változóban...
    Mutasd a teljes hozzászólást!
  • Ezzel próbálkoztam már 2011.08.07. 12:36 -kor is, akkor
    nem tudom mit bénáztam, mert este 17:24 -kor újra megpróbáltam ezt és működött.

    Vagy 5 éve egy sort sem írtam, kicsit rozsdás lehetek

    try s:=Reg.CurrentPath; Reg.GetKeyNames(sl); for i:=1 to sl.Count do begin Reg.CloseKey; Reg.OpenKey(s + ' \ ' +sl[i-1],False); ss:=Reg.CurrentPath; Reg.GetKeyNames(ssl); for ii:=1 to ssl.Count do begin Reg.CloseKey; Reg.OpenKey(ss + ' \ ' +ssl[ii-1],False); // sss:=Reg.CurrentPath; if Reg.ValueExists('Class') then ertek:=Reg.ReadString('Class'); If ertek = 'Net' then begin Reg.ValueExists('DeviceDesc'); ListBox1.Items.Add(Reg.ReadString('DeviceDesc')); end; end; end; Finally
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd