Seite 1 von 1
Problem mit RegEnumKeyNames
Verfasst: Mo 9. Nov 2009, 10:29
von R2D2
Hallo,
mit folgender gescripteten Eigenschaft habe ich ein Problem. Obwohl bei mir in dem Schlüssel zwei Werte drin stehen, liefert mir dieses Script kein Ergebnis. Und zwar kommt er gar nicht erst in die Schleife rein (kann man ja recht einfach mit
msgbox("Test") testen).
Code: Alles auswählen
Function BeforeScan()
Dim Key
Dim Wert
For Each Key In RegEnumKeyNames("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run")
Wert = RegGetValue("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", Key.Name)
SetProperty "Autostart "&Key.Name, Wert
Next
End Function
Re: Problem mit RegEnumKeyNames
Verfasst: Mo 9. Nov 2009, 11:28
von WernerB
Die Werte der Autorun-Einträge in einzelne geskriptete Eigenschaften zu schreiben, deren Namen aus den Autorun-Einträgen gebildet werden, ist keine schlechte Idee.
Man muss nur berücksichtigen, dass die maximale Zahl verschiedener Eigenschaften durch die verwendete Datenbank beschränkt ist. Bei der voreingestellen Jet-Engine sind das ca. 250.
Zum Code: Da es sich um Benutzereinstellungen (HKEY_CURRENT_USER) handelt, muss der Aufruf in der Funktion
BeforeUserScan() erfolgen. Diese Funktion wird für jeden Benutzer aufgerufen, der an dem Rechner gerade angemeldet ist.
Desweiteren handelt es sich bei den einzelnen Autostart-Einträgen um Werte (erscheinen auf der rechten Seite im Regedit) und keine Schlüssel.
Folgender Code sollte funktionieren:
Code: Alles auswählen
Function BeforeUserScan()
Dim WertName, Wert
For Each WertName In RegEnumValueNames("HKCU\Software\Microsoft\Windows\CurrentVersion\Run")
Wert = RegGetValue("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", WertName)
SetProperty "Autostart " & WertName, Wert
Next
End Function
Re: Problem mit RegEnumKeyNames
Verfasst: Mo 9. Nov 2009, 12:14
von R2D2
Danke Werner, jetzt geht's.
Ich verstehe nur den Unterschied zwischen
RegEnumKeys und
RegEnumKeyNames nicht.
Sehe ich das richtig, dass
RegEnumKeys ein Array der Unterschlüssel als Objekt liefert und
RegEnumKeyNames ein Array der Schlüsselnamen (als String)?
Wäre schön, wenn ihr das im Handbuch bißchen erläutern könntet. Ich habe mal ein Testscript gemacht, um mir über die Bedeutung klar zu werden:
Code: Alles auswählen
Function BeforeUserScan()
Dim Key, KeyName, Ausgabe
For Each KeyName In RegEnumKeyNames("HKCU\Software\Microsoft\Windows")
Ausgabe = Ausgabe + KeyName + ","
Next
SetProperty "Test1" , Ausgabe
Ausgabe = ""
For Each Key In RegEnumKeys("HKCU\Software\Microsoft\Windows")
Ausgabe = Ausgabe + Key.name + ","
Next
SetProperty "Test2" , Ausgabe
End Function
Re: Problem mit RegEnumKeyNames
Verfasst: Mo 9. Nov 2009, 14:49
von WernerB
Stimmt,
RegEnumKeys und
RegEnumKeyNames unterschieden sich dadurch, dass letzteres nur die Namen als Array von Strings zurückgibt und ersteres ein Array von Registry-Objekten.
Das Registry-Objekt kapselt das Registry-Handle des Betriebssystems. Wenn man viele Operationen auf den gleichen Registry-Key ausführt (z.B. alle Unterwerte durchgehen), muss das Handle nicht jedes mal neu erzeugt werden, was vor allem über das Netzwerk den Vorgang beschleunigt.
So kann man die Autostart-Abfrage von oben auch wie folgt schreiben:
Code: Alles auswählen
Function BeforeUserScan()
Dim WertName, Wert
Dim SchluesselObjekt
Set SchluesselObjekt=RegOpenKey("HKCU\Software\Microsoft\Windows\CurrentVersion\Run")
For Each WertName In SchluesselObjekt.ValueNames
Wert = SchluesselObjekt.GetValue(WertName)
SetProperty "Autostart " & WertName, Wert
Next
End Function