21. august 2006 - 10:03
Der er
1 kommentar og
1 løsning
lister under nøgle fra reg databasen
Kan man bruge en script til at finde, liste, og tælle undernøglerne til en givne nøgle i registreringsdatabasen? RegRead synes ikke at kunne gøre det.
21. august 2006 - 12:00
#1
Du skal tilpasse de første 2 linier til dit specifikke ønske. Derudover kan du vælge at fjerne nogle af tællerne, hvis du KUN vil vide, hvor mange underNØGLER der er (og altså ikke vil vide noget om, hvor mange værdier, der er i disse nøgler)
Det virker på en XP-maskine, og sandsynligvis også på en Win2k maskine. Jeg er lidt mere usikker på tidligere styresystemer, men det vil i hvert fald kunne fixes, hvis det også ønskes.
======================================================
txtFilepath = "regexp.txt"
regChkPath = "HKEY_CURRENT_USER\Software\ASProtect"
Dim Wshshell
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Dim objFSO, objTextFilein
Dim sReadLine
Dim win, LineCount, subkey, value, defvalue
Set objFSO = CreateObject("Scripting.FileSystemObject")
Win = objFSo.GetSpecialFolder(0)
return=WshShell.Run(win & "\Regedit.exe /e " & txtFilepath & " " & regChkPath, 1, true)
Set objTextFilein = objFSO.OpenTextFile(txtFilepath, 1,, -1)
LineCount = 0
subkey = 0
value = 0
defvalue = 0
sReadLine = objTextFilein.ReadLine
Do While Not objTextFilein.AtEndOfStream
sReadLine = objTextFilein.ReadLine
If Left(sReadLine, 1) = "[" then
subkey = subkey + 1
Elseif Left(sReadLine, 1) = chr(34) then
value = value + 1
Elseif Left(sReadLine, 1) = "@" then
defvalue = defvalue + 1
End If
LineCount = LineCount + 1
Loop
objTextFilein.Close
msgbox "Antal undernøgler: " & subkey & chr(13) & "Antal værdier (inkl. definerede standardværdier): " & value + defvalue
22. august 2006 - 19:28
#2
OK - mange tak. Det havde jeg ikke tænkt på - og det virker glimrende. Jeg skulle bare lave nogle små tilføjelse for også at få navnene med på nøglerne. Men jeg undres over at WSH ikke har en kommando der direkt klarer en så simpel operation. Mit mål er at lave en script som jeg kan bruge til at sikre på et netværk at uanset hvor jeg logger på, den maskine jeg pt arbejder med vil, som standard, vælge den lokal printer hvis der findes en. Eksemplevis Corels gamle PerfectScript kan gøre det således:
=============================================================================
lp="standard"
PrinterList = RegistryOpenKey(LocalMachine!; "System\CurrentControlSet\Control\Print\Printers\")
NumPrinters := RegistryQueryKeyCount (Hkey: PrinterList)
If(NumPrinters=0)quit endif
fornext(ps;1;NumPrinters)
tweak=RegistryOpenKey(LocalMachine!;"System\CurrentControlSet\Control\Print\Printers\")
tweak=RegistryEnumKey(tweak;ps)
tweak=RegistryOpenKey(LocalMachine!;"System\CurrentControlSet\Control\Print\Printers\"+tweak)
If(strleft(RegistryQueryValue(tweak;"Port");3)="USB" OR strleft(RegistryQueryValue(tweak;"Port");3)="LPT")
lp=ps
endif
endfor
If(lp="standard")
messagebox(x;"Besked";"Ingen lokal printer til rådighed. Ingen ændringer foretaget i printer indstillinger.")
quit
endif
vLocalPrinter=RegistryEnumKey(tweak;lp)
vWinDevice=RegistryOpenKey(CurrentUser!;"Software\Microsoft\Windows NT\CurrentVersion\Windows")
vDevice=RegistryOpenKey(CurrentUser!;"Software\Microsoft\Windows NT\CurrentVersion\Devices")
neo=RegistryQueryValue(vDevice;vLocalPrinter)
messagebox(x;"Message";neo)
SetKey := RegistrySetValue(vWinDevice;"Device"; vLocalPrinter+","+neo;String!)
========================================================================
Denne script går direkt ind og hente nøglerne fra regbasen og skriver den ønskede værdi ind ifølge de oplysninger den samle ind. Ingen behov for lægge oplysningen ud omkring en tekstfil for så at hente dem ind igen ad sammen vej. Men ak! Hvor er der et system som stadig har god gamle PS. Din ide er dog brugbare så tak for den igen.