Frage bezüglich Registryschlüsseln

Für allgemeine Fragen zur Programmierung mit PureBasic.
RalfR
Beiträge: 10
Registriert: 08.09.2004 15:06

Frage bezüglich Registryschlüsseln

Beitrag von RalfR »

Hallo zusammen, meine erste Frage im neuen Forum, hab schon im alten gesucht aber nichts gefunden.

Also: ich muss in der Registry einen Schlüssel ersetzen, eigentlich nicht schwer, aber:

ich muss diesen Schlüssel für jeden Benutzer, der unter HKEY_USERS eine ID hat ändern.
Das Problem ist, dass ich keine Möglichkeit kenne, die in einem Schlüssel vorhandenen weiteren Schlüssel auszulesen/aufzulisten :| , für die in einem Schlüssel vorhandenen Werte geht das zum Beispiel mit Hilfe der REGIni-Library, aber halt nur für Werte und nicht für Schlüssel.

so, vielen Dank für eure Überlegungen zu diesem Thema, bis dann

Ralf
Icke
Beiträge: 143
Registriert: 08.09.2004 13:19

Beitrag von Icke »

Dann schau dir das mal an, stand irgendwann schonmal irgendwo hier im Forum :

Code: Alles auswählen


; Autor: Manne
; Datum: 30.03.2003
; PrgName: SoftwareInventory


;- Deklaration der Variablen
DefType.s NodeName, cName, OutDir, OutFile, tOutFile, columnheadings, sName, Subkey, zeile, datum
DefType.l check, hkey, Cnt, pos, lpdwDisposition
NewList subName.s()

;- Zuweisen der Werte
#BUFFER_SIZE = 255
NodeName = Space(256)
cName = "COMPUTERNAME"
columnheadings = "NodeName,DisplayName,Description,Publisher,sVersion,ProductID"
Subkey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
OutDir = "C:\"
hkey = 0

;- Deklaration der Proceduren
Procedure.s ExePath()
  tmp$ = Space(1000)
  GetModuleFileName_(0,@tmp$,1000)
  ProcedureReturn GetPathPart(tmp$)
EndProcedure

Procedure.s ReadRegKey(OpenKey.l,SubKey.s,ValueName.s)
  hKey.l=0
  keyvalue.s=Space(255)
  datasize.l=255
 
  If RegOpenKeyEx_(OpenKey,SubKey,0,#KEY_READ,@hKey)
    MessageBeep_(#MB_ICONEXCLAMATION)
    End
  Else
    If RegQueryValueEx_(hKey,ValueName,0,0,@keyvalue,@datasize)
        keyvalue = ""
    Else 
        keyvalue=Left(keyvalue,datasize-1)
    EndIf
    RegCloseKey_(hKey)
  EndIf
   
  ProcedureReturn keyvalue
EndProcedure 

;- Mainprogramm Registry bearbeiten, Ziel-File schreiben u.a.
GetEnvironmentVariable_(cName, NodeName, 256)

If NodeName = ""
  End
EndIf

tOutFile = ExePath() + "tmp" + ".csv"
OutFile = OutDir + NodeName + ".csv"


check = CreateFile(0, tOutFile)
WriteStringN(columnheadings)

RegCreateKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\a", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_CREATE_SUB_KEY, 0, @hkey, @lpdwDisposition)
       
    If RegOpenKey_(#HKEY_LOCAL_MACHINE, Subkey, @hKey) = 0         
;       ;Enumerate the keys
        While RegEnumKeyEx_(hKey, Cnt, sName.s, @Ret, 0, 0, 0, 0) <> #ERROR_NO_MORE_ITEMS
            Cnt = Cnt + 1
            AddElement(subName())
            subName() = sName
            sName = Space(#BUFFER_SIZE)
            Ret.l= #BUFFER_SIZE
        Wend
    Else
        WriteString("Fehler, konnte Registrierung nicht öffnen!")
    EndIf       
RegCloseKey_(hkey)

pos = 1

While pos <= Cnt - 1
  SelectElement(subName(), pos)

  DisplayName.s = ReadRegKey(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\"+ subName(), "DisplayName")
  Description.s = ReadRegKey(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\"+ subName(), "Comments")
  Publisher.s = ReadRegKey(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\"+ subName(), "Publisher")
  sVersion.s = ReadRegKey(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\"+ subName(), "DisplayVersion")
  ProductID.s = ReadRegKey(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\"+ subName(), "ProductID")

  If DisplayName = ""
    DisplayName = subName()
  EndIf

  zeile = Nodename + "," + DisplayName + "," + Description + "," + Publisher + "," + sVersion + "," + ProductID
  WriteStringN(zeile)

  pos = pos + 1
Wend

datum = FormatDate("%dd.%mm.%yyyy", Date())
WriteStringN("")
WriteStringN("SoftwareInventory vom "+ datum)
CloseFile(0)

RegDeleteKey_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\a")

CopyFile(tOutFile, OutFile)
DeleteFile(tOutFile)

End 
RalfR
Beiträge: 10
Registriert: 08.09.2004 15:06

Beitrag von RalfR »

Ahhh, an die API hab ich nicht gedacht :roll: naja, aber damit sollte es gehen,

thx
Antworten