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
Frage bezüglich Registryschlüsseln
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