首页 电脑 电脑学堂 查看内容

完整的注册表操作实例 VBS脚本

2009-9-24 16:05 655 0

摘要:   就是个实例,基本包含了所有对注册表的操作。   ①创建主键、创建各类型的键值。   ②读取键值并分析键值类型。   ③枚举主键及键值。   ④判断键或键值是否存在。   ⑤查询注册表键的...

  就是个实例,基本包含了所有对注册表的操作。   ①创建主键、创建各类型的键值。   ②读取键值并分析键值类型。   ③枚举主键及键值。   ④判断键或键值是否存在。   ⑤查询注册表键的操作权限。   ⑥监视注册表根键、主键、键值,当发现变动时提示。   代码如下:   '''注册表查询/操作   On Error Resume Next   Const HKEY_CLASSES_ROOT = &H80000000'''设置注册表5大根键,HKCR-----------①   Const HKEY_CURRENT_USER = &H80000001'''HKCU   Const HKEY_LOCAL_MACHINE = &H80000002'''HKLM   Const HKEY_Users = &H80000003'''HKU   Const HKEY_Current_Config = &H80000005'''HKCC   Const REG_SZ = 1'''设置注册表键值类型,字符串型---------------------------②   Const REG_EXPAND_SZ = 2'''扩展字符串型   Const REG_BINARY = 3'''二进制型   Const REG_DWORD = 4'''双字节型   Const REG_MULTI_SZ = 7'''多字符串型   Const KEY_QUERY_VALUE = &H0001'''查询注册表权限,查询数值-----------------③   Const KEY_SET_VALUE = &H0002'''设置数值   Const KEY_CREATE_SUB_KEY = &H0004'''创建子项   Const DELETE = &H00010000'''删除项值   '''-----------------配置环境(路径)----------------------------------------00   strComputer = "."   Set WshShell = WScript.CreateObject("WScript.Shell")   Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")   strKeyRoot = HKEY_LOCAL_MACHINE   Regpath = "HKEY_LOCAL_MACHINE"   strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Run"   WshSHell.popup "设置路径【HKLM\Software\Microsoft\Windows\CurrentVersion\Run】成功"&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''-----------------创建主键"REG_KEY_SZ"----------------------------------01   strKeyPathNew = "Software\Microsoft\Windows\CurrentVersion\Run\User_baomaboy\"'''注意因为是新建主键,要多加个“\”   oReg.CreateKey strKeyRoot, strKeyPathNew   WshSHell.popup "创建主键【HKLM\Software\Microsoft\Windows\CurrentVersion\Run\User_baomaboy\】成功"&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''-----------------创建字符串值"REG_SZ"----------------------------------02   strValueName="1字符串名"   strValue="字符串值"   oReg.SetStringValue strKeyRoot, strKeyPath, strValueName, strValue   WshSHell.popup "创建字符串【HKLM\Software\Microsoft\Windows\CurrentVersion\Run\1字符串名】成功"&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''-----------------创建双字节值"REG_DWORD"--------------------------------   strValueName="2双字节名"   strValue=1   oReg.SetDWORDValue strKeyRoot, strKeyPath, strValueName, strValue   WshSHell.popup "创建双字节值【HKLM\Software\Microsoft\Windows\CurrentVersion\Run\2双字节名】成功"&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''-----------------创建多字符串"REG_MULTI_SZ"-----------------------------   strValueName="3多字符串名"   arrStringValues = Array("QQ25926183", "userbaomaboy","LLKJ", "玲珑科技")   oReg.SetMultiStringValue strKeyRoot, strKeyPath, strValueName, arrStringValues   WshSHell.popup "创建多字符串【HKLM\Software\Microsoft\Windows\CurrentVersion\Run\3多字符串名】成功"&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''-----------------创建扩展字符串"REG_EXPAND_SZ"--------------------------   strValueName = "4扩展字符串名"   strValue = "%PATHEXT%"   oReg.SetExpandedStringValue strKeyRoot, strKeyPath, strValueName, strValue   WshSHell.popup "创建扩展字符串【HKLM\Software\Microsoft\Windows\CurrentVersion\Run\4扩展字符串名】成功"&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''-----------------创建二进制值"REG_BINVRY_SZ"----------------------------   RegPathEr=Regpath&"\Software\Microsoft\Windows\CurrentVersion\Run\5二进制值"   WshSHell.RegWrite RegPathEr,1,"REG_BINARY"   WshSHell.popup "创建二进制值【HKLM\Software\Microsoft\Windows\CurrentVersion\Run\5二进制值】成功"&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 读取字符串值"REG_VALUE"-------------------------------   oReg.GetStringValue strKeyRoot, strKeyPath, "1字符串名", strRunCommand   WshSHell.popup "读取字符串值:"&vbcrlf&vbcrlf&strRunCommand&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 读取双字节值"REG_DWORD"-------------------------------   oReg.GetDWORDValue strKeyRoot, strKeyPath, "2双字节名", strRunCommand   WshSHell.popup "读取双字节值:"&vbcrlf&vbcrlf&strRunCommand&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 读取多字符串值"REG_MULTI_SZ"--------------------------   oReg.GetMultiStringValue strKeyRoot, strKeyPath, "3多字符串名", arrValues   For Each strValue In arrValues   DuoString=DuoString&vbcrlf&strValue   Next   WshSHell.popup "读取多字符串值:"&vbcrlf&vbcrlf&DuoString&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 读取扩展字符串"REG_EXPAND_SZ"-------------------------   oReg.GetExpandedStringValue strKeyRoot, strKeyPath, "4扩展字符串名", strValue   WshSHell.popup "读取扩展字符串值:"&vbcrlf&vbcrlf&strValue&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 读取二进制值"REG_BINVRY_SZ"----------------------------   oReg.GetBinaryValue strKeyRoot, strKeyPath, "5二进制值", strValue   For i = lBound(strValue) to uBound(strValue)   ErString=ErString&strValue(i)   Next   WshSHell.popup "读取二进制值:"&vbcrlf&vbcrlf&ErString&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 枚举主键"SUB_KEY"--------------------------------------   oReg.EnumKey strKeyRoot, strKeyPath, arrSubKeys   For Each subkey In arrSubKeys   ArrSubKeyStr=ArrSubKeyStr&vbcrlf&subkey   Next   WshSHell.popup "枚举主键:"&vbcrlf&vbcrlf&ArrSubKeyStr&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 枚举键值和键值类型"KEY_Value_Types"--------------------   oReg.EnumValues strKeyRoot, strKeyPath, arrValueNames, arrValueTypes   For i=0 To UBound(arrValueNames)   If Len(arrValueNames(i)) > 0 Then   Select Case arrValueTypes(i)   Case REG_SZ ValueType=" >>>是:字符串值"   Case REG_EXPAND_SZ ValueType=" >>>是:扩展字符串值"   Case REG_BINARY ValueType=" >>>是:二进制值"   Case REG_DWORD ValueType=" >>>是:双字节值"   Case REG_MULTI_SZ ValueType=" >>>是:多字符串值"   End Select   arrValueStr=arrValueStr&vbcrlf&arrValueNames(i)&ValueType   End If   Next   WshSHell.popup "枚举键值和类型:"&vbcrlf&vbcrlf&arrValueStr&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 枚举键值和键值内容一"KEY_Value_Contenct"----------------   oReg.EnumValues strKeyRoot, strKeyPath, arrValueNames, arrValueTypes   For i=0 To UBound(arrValueNames)   If Len(arrValueNames(i)) > 0 Then   oReg.GetStringValue strKeyRoot,strKeyPath,arrValueNames(i),strValue'''适应于字符串型   ValueStr=ValueStr&vbcrlf&arrValueNames(i)&vbcrlf&strValue   end if   Next   WshSHell.popup "枚举键值和内容一:"&vbcrlf&vbcrlf&ValueStr&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 枚举键值和键值内容二"KEY_Value_Contenct"----------------   oReg.EnumValues strKeyRoot, strKeyPath, arrValueNames, arrValueTypes   i=0   For Each strValue in arrValueNames   If Len(strValue) > 0 Then   i=i+1   oReg.GetStringValue strKeyRoot,strKeyPath,strValue,strRunCommand'''适应于字符串型   intLength = Len(strRunCommand)   if intLength > 35 then'''美化回显,(可再加代码判路径是否包含断汉字)   strRunCommand = Left(strRunCommand, 20)&"……"&Right(strRunCommand, 13)   end if   StrRoot= i&".【"&strValue&"】"&vbCRLF&" "&strRunCommand   ARoot=ARoot&vbCRLF&StrRoot   End If   Next   WshSHell.popup "枚举键值和内容二:"&vbcrlf&vbcrlf&ARoot&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 删除键值"REG_VALUE"-------------------------------------   oReg.DeleteValue strKeyRoot, strKeyPath, "5二进制值"   WshSHell.popup "删除键值:"&vbcrlf&vbcrlf&Regpath&"\"&strKeyPath&"\5二进制值"&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''----------------- 删除主键"SUB_KEY"---------------------------------------   oReg.DeleteKey strKeyRoot, strKeyPathNew   WshSHell.popup "删除主键:"&vbcrlf&vbcrlf&Regpath&"\"&strKeyPathNew&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''-----------------判断键值是否存在-----------------------------------------   strValue="""病毒"""   oReg.GetStringValue strKeyRoot,strKeyPath,strValue,strRunCommand   If IsNull(strRunCommand) Then   WshSHell.popup strValue&"此注册表键值不存在."&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   Else   WshSHell.popup strValue&"注册表中存在此键值."&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   End If   '''----------------- 检查注册表访问权限"Check Up Extent Of Power"------------   oReg.CheckAccess strKeyRoot, strKeyPath, KEY_QUERY_VALUE, bHasAccessRight   If bHasAccessRight = True Then   aaa="可以查询数值"   Else   aaa="不可查询数值"   End If   oReg.CheckAccess strKeyRoot, strKeyPath, KEY_SET_VALUE, bHasAccessRight   If bHasAccessRight = True Then   bbb="可以设置数值"   Else   bbb="不可设置数值"   End If   oReg.CheckAccess strKeyRoot, strKeyPath, KEY_CREATE_SUB_KEY, bHasAccessRight   If bHasAccessRight = True Then   ccc="可以创建主键"   Else   ccc="不可创建主键"   End If   oReg.CheckAccess strKeyRoot, strKeyPath, DELETE, bHasAccessRight   If bHasAccessRight = True Then   ddd="可以删除键值"   Else   ddd="不可删除键值"   End If   WshSHell.popup "注册表访问权限:"&vbcrlf&vbcrlf&Regpath&"\"&strKeyPath&vbcrlf&vbcrlf&aaa&vbcrlf&bbb&vbcrlf&ccc&vbcrlf&ddd&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&"5 秒钟后本窗口将自动关闭!", 5, "QQ:25926183", 0 + 64   '''-----恢复注册表原样--------   oReg.DeleteValue strKeyRoot, strKeyPath, "4扩展字符串名"   oReg.DeleteValue strKeyRoot, strKeyPath, "3多字符串名"   oReg.DeleteValue strKeyRoot, strKeyPath, "2双字节名"   oReg.DeleteValue strKeyRoot, strKeyPath, "1字符串名"   '''-----------------监视注册表键值"REG_KEY_SZ"-------------------------------   '''用以对注册表中HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\1字符串名"分支下的所有更改内容进行监视。   'Set wmiServices = GetObject("winmgmts:root/default")   'Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")   'wmiServices.ExecNotificationQueryAsync wmiSink, _   '"SELECT * FROM RegistryValueChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND " & _   '"KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run' AND ValueName='1字符串名'"   'WScript.Echo "开始监视注册表HKLM_Run主键键值的值的变化......" & vbCrLf   'While(1)   'WScript.Sleep 1000   'Wend   'Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)   'WScript.Echo ".........注册表改变......" & vbCrLf & _   '"----------监视注册表键值的值变化-----------" & vbCrLf & _   'wmiObject.GetObjectText_()   'WScript.Quit(0)'''用作发现修改则提示后退出   'End Sub   '''-----------------监视注册表主键"REG_SubKey_SZ"-----------------------------   '''监视注册表,以发现对 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 的任何更改。   'Set wmiServices = GetObject("winmgmts:root/default")   'Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")   'wmiServices.ExecNotificationQueryAsync wmiSink, _   '"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND " & _   '"KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'"   'WScript.Echo "开始监视注册表HKLM_Run主键的键值变化......" & vbCrLf   'While(1)   'WScript.Sleep 1000   'Wend   'Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)   'WScript.Echo ".........注册表改变......" & vbCrLf & _   '"----------监视注册表主键键值变化-----------" & vbCrLf & _   'wmiObject.GetObjectText_()   'WScript.Quit(0)'''用作发现修改则提示后退出   'End Sub   '''-----------------监视注册表根键"REG_RootKey_SZ"----------------------------   '''监视注册表,以发现对 HKLM 的任何更改。   Set wmiServices = GetObject("winmgmts:root/default")   Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")   wmiServices.ExecNotificationQueryAsync wmiSink, _   "SELECT * FROM RegistryTreeChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND RootPath=''"   WScript.Echo "开始监视注册表HKLM根键的所有变化......" & vbCrLf   While(1)   WScript.Sleep 1000   Wend   Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)   WScript.Echo ".........注册表改变......" & vbCrLf & _   "----------监视注册表根键所有变化-----------" & vbCrLf & _   wmiObject.GetObjectText_()   WScript.Quit(0)'''用作发现修改则提示后退出   End Sub
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部