关于注册表

weiyulin 2009-07-29 11:38:17

我想删除 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}

整个键,这个键中包括其它子键 根据机器的不能 其子键名称也不同,不能确定


哪位老师 能给我份 遍历删除注册表中某个键的 代码

现在只有这么多分,解决了 另贴加分.谢谢
...全文
179 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiyulin 2009-08-01
  • 打赏
  • 举报
回复


感谢 TrueZq 老师的回复 贴已加分


我试了过后 再决定,再次感谢
weiyulin 2009-08-01
  • 打赏
  • 举报
回复
以下是 小弟 修改的代码 执行 没的反应

Option Explicit
Public Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
Public Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_DYN_DATA = &H80000006
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_USERS = &H80000003
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public KEY_ALL_ACCESS As Long

Public Const ERROR_SUCCESS = 0&

Public Function EnumReg(keyroot As Long, keyname As String) As Boolean
Dim Name As String, Idx As Long
Dim rc As Long
Dim hKey As Long
' 在 KeyRoot {HKEY_LOCAL_MACHINE...} 下打开注册表关键字
'------------------------------------------------------------
rc = RegOpenKeyEx(keyroot, keyname, 0, KEY_ALL_ACCESS, hKey) ' 打开注册表关键字

If (rc <> ERROR_SUCCESS) Then
EnumReg = False
Exit Function
Else: ' showmsg "打开" & keyroot & keyname & "成功"
End If

Idx = 0
Name = String(256, Chr(0))
Do
rc = RegEnumKey(hKey, Idx, Name, Len(Name))
If rc = 0 Then
Dim strKey As String
strKey = Left(Name, InStr(Name, Chr(0)) - 1)

MsgBox strKey
Idx = Idx + 1
End If
Loop Until rc <> 0

' Set allSubKey = Nothing
EnumReg = True
End Function
weiyulin 2009-08-01
  • 打赏
  • 举报
回复

谢谢 TrueZq 老师的回复


您的代码不全 小弟刚学VB不久 能否把详细的代码给我 感激不尽

weiyulin 2009-07-31
  • 打赏
  • 举报
回复

好不意思 我需要的是 注册注册表中某个整个键的代码
TrueZq 2009-07-31
  • 打赏
  • 举报
回复
Public Function EnumReg(keyroot As Long, keyname As String) As Boolean
Dim Name As String, Idx As Long
Dim rc As Long
Dim hKey As Long
' 在 KeyRoot {HKEY_LOCAL_MACHINE...} 下打开注册表关键字
'------------------------------------------------------------
rc = RegOpenKeyEx(keyroot, keyname, 0, KEY_ALL_ACCESS, hKey) ' 打开注册表关键字

If (rc <> ERROR_SUCCESS) Then
EnumReg = False
Exit Function
Else: ' showmsg "打开" & keyroot & keyname & "成功"
End If

Idx = 0
Name = String(256, Chr(0))
Do
rc = RegEnumKey(hKey, Idx, Name, Len(Name))
If rc = 0 Then
Dim strKey As String
strKey = Left(Name, InStr(Name, Chr(0)) - 1)

strKey 是其中一个子项
Idx = Idx + 1
End If
Loop Until rc <> 0

Set allSubKey = Nothing
EnumReg = True
End Function
weiyulin 2009-07-30
  • 打赏
  • 举报
回复


谢谢 不是我想要的
weiyulin 2009-07-30
  • 打赏
  • 举报
回复


有没有复杂一点的方法啊 呵呵
threenewbee 2009-07-30
  • 打赏
  • 举报
回复
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Public Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)

Public Const KEY_CREATE_LINK = &H20
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_EVENT = &H1
Public Const KEY_LENGTH_MASK = &HFFFF0000
Public Const KEY_NOTIFY = &H10
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Const KEY_EXECUTE = (KEY_READ)
Public Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))

''*************************************************************************************

Public Function RegDelAllSubVal()Function RegDelAllSubVal(ByVal hKeyR As Long, ByVal mKey As String, Optional ByVal Flush As Boolean = False) As Boolean
On Error Resume Next
Dim hkey As Long, Cnt As Long
Dim sName As String, Ret As Long: sName = Space(BUFFER_SIZE)
Dim sData(BUFFER_SIZE) As Byte, RetData As Long
Dim Namespace (NameSpace() As String: ReDim Namespace (NameSpace(1)

If RegOpenKeyEx(ByVal hKeyR, ByVal mKey, ByVal 0&, KEY_ALL_ACCESS, hkey) = ERROR_SUCCESS Then
Cnt = 0: Ret = BUFFER_SIZE: RetData = BUFFER_SIZE
If RegEnumValue(hkey, Cnt, sName, Ret, ByVal 0&, ByVal 0&, sData(0), RetData) <> ERROR_NO_MORE_ITEMS Then
Do
ReDim Preserve Namespace (NameSpace(Cnt)
Namespace (NameSpace(Cnt) = Left$(sName, Ret)
Cnt = Cnt + 1: Ret = BUFFER_SIZE: RetData = BUFFER_SIZE
Loop While RegEnumValue(hkey, Cnt, sName, Ret, ByVal 0&, ByVal 0&, sData(0), RetData) <> ERROR_NO_MORE_ITEMS

For Cnt = 0 To UBound(Namespace )NameSpace)
Call RegDeleteValue(ByVal hkey, Namespace (NameSpace(Cnt))
Next Cnt
End If
Cnt = 0: Ret = BUFFER_SIZE: RetData = BUFFER_SIZE
RegDelAllSubVal = (RegEnumValue(hkey, Cnt, sName, Ret, ByVal 0&, ByVal 0&, sData(0), RetData) = ERROR_NO_MORE_ITEMS)
If Flush Then RegFlushKey hkey
RegCloseKey hkey
Else
RegDelAllSubVal = False
End If
End Function

Public Function RegDelAllSubKey()Function RegDelAllSubKey(ByVal hKeyRoot As Long, ByVal mKey1 As String, Optional ByVal Flush As Boolean = False) As Boolean '', mKey2 As String
On Error Resume Next
Dim hkey As Long, Ret As Long, Cnt As Long
Dim i As Long, t As FILETIME
Dim sName As String: sName = Space(BUFFER_SIZE)
Dim Namespace (NameSpace() As String: ReDim Namespace (NameSpace(1)
Call RegDelAllSubVal(ByVal hKeyRoot, ByVal mKey1, False)
If RegOpenKeyEx(ByVal hKeyRoot, ByVal mKey1, ByVal 0&, KEY_ALL_ACCESS, hkey) = ERROR_SUCCESS Then
RegDelAllSubKey = True: Cnt = 0: Ret = BUFFER_SIZE
If RegEnumKeyEx(hkey, Cnt, sName, Ret, ByVal 0&, vbNullString, i, t) <> ERROR_NO_MORE_ITEMS Then
Do
ReDim Preserve Namespace (NameSpace(Cnt)
Namespace (NameSpace(Cnt) = Left$(sName, Ret)
Cnt = Cnt + 1: Ret = BUFFER_SIZE
Loop While RegEnumKeyEx(hkey, Cnt, sName, Ret, ByVal 0&, vbNullString, i, t) <> ERROR_NO_MORE_ITEMS

For Cnt = LBound(Namespace )NameSpace) To UBound(Namespace )NameSpace)
Call RegDelAllSubKey(ByVal hKeyRoot, ByVal mKey1 & "" & Namespace (NameSpace(Cnt))
Next Cnt
End If
RegDelAllSubKey = (RegDeleteKey(ByVal hKeyRoot, ByVal mKey1) = ERROR_SUCCESS)
If Flush Then RegFlushKey hkey
RegCloseKey hkey
Else
RegDelAllSubKey = False
End If
End Function

Public Function RegDelSingleValue()Function RegDelSingleValue(ByVal mKeyRoot As Long, ByVal sKeyName As String, ByVal sValueName As String) As Long
On Error Resume Next
Dim hkey As Long
If RegOpenKeyEx(mKeyRoot, ByVal sKeyName, ByVal 0&, KEY_ALL_ACCESS, hkey) = ERROR_SUCCESS Then
RegDelSingleValue = RegDeleteValue(hkey, ByVal sValueName)
Call RegCloseKey(hkey)
Else
RegDelSingleValue = ERROR_CANTOPEN
End If
End Function

Public Function RegSetSingleValue()Function RegSetSingleValue(ByVal mKeyRoot As Long, ByVal sKeyName As String, ByVal sValueName As String, ByVal sValueType As Long, ByVal sValue As String) As Long
On Error Resume Next
Dim hkey As Long
If RegCreateKey(mKeyRoot, sKeyName, hkey) = ERROR_SUCCESS Then
RegSetSingleValue = RegSetValueEx(hkey, ByVal sValueName, ByVal 0&, ByVal sValueType, ByVal sValue, ByVal Len(sValue))
Call RegCloseKey(hkey)
Else
RegSetSingleValue = ERROR_CANTOPEN
End If
End Function

保存为一个模块。
threenewbee 2009-07-30
  • 打赏
  • 举报
回复
'这是一个操作注册表的Bas文件,其中包含可以建立新键值,删除键值,查询键值的函数.
Option Explicit
Option Base 0
Public Declare Function RegCloseKey()Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Long) As Long
Public Declare Function RegConnectRegistry()Function RegConnectRegistry Lib "advapi32.dll" Alias "RegConnectRegistryA" (ByVal lpMachineName As String, ByVal hkey As Long, phkResult As Long) As Long
Public Declare Function RegCreateKey()Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegCreateKeyEx()Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hkey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
Public Declare Function RegDeleteKey()Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hkey As Long, ByVal lpSubKey As String) As Long
Public Declare Function RegDeleteValue()Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hkey As Long, ByVal lpValueName As String) As Long
Public Declare Function RegEnumKey()Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hkey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Public Declare Function RegEnumKeyEx()Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hkey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Public Declare Function RegEnumValue()Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hkey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Public Declare Function RegFlushKey()Function RegFlushKey Lib "advapi32.dll" (ByVal hkey As Long) As Long
Public Declare Function RegGetKeySecurity()Function RegGetKeySecurity Lib "advapi32.dll" (ByVal hkey As Long, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR, lpcbSecurityDescriptor As Long) As Long
Public Declare Function RegLoadKey()Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hkey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
Public Declare Function RegNotifyChangeKeyValue()Function RegNotifyChangeKeyValue Lib "advapi32.dll" (ByVal hkey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
Public Declare Function RegOpenKey()Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegOpenKeyEx()Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hkey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegQueryInfoKey()Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hkey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
Public Declare Function RegQueryValue()Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hkey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
Public Declare Function RegQueryValueEx()Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegReplaceKey()Function RegReplaceKey Lib "advapi32.dll" Alias "RegReplaceKeyA" (ByVal hkey As Long, ByVal lpSubKey As String, ByVal lpNewFile As String, ByVal lpOldFile As String) As Long
Public Declare Function RegRestoreKey()Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hkey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
Public Declare Function RegSaveKey()Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hkey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Public Declare Function RegSetKeySecurity()Function RegSetKeySecurity Lib "advapi32.dll" (ByVal hkey As Long, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR) As Long
Public Declare Function RegSetValue()Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hkey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Public Declare Function RegSetValueEx()Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Declare Function RegUnLoadKey()Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hkey As Long, ByVal lpSubKey As String) As Long
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Public Type SECURITY_ATTRIBUTES
nLength As Long
bInheritHandle As Long
lpSecurityDescriptor As Long
End Type

Public Type ACL
AclRevision As Byte
AceCount As Integer
Sbz2 As Integer
AclSize As Integer
Sbz1 As Byte
End Type

Public Type SECURITY_DESCRIPTOR
Revision As Byte
Sacl As ACL
Dacl As ACL
Owner As Long
Group As Long
Control As Long
Sbz1 As Byte
End Type
Public Const REG_BINARY = 3
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_DWORD_BIG_ENDIAN = 5
Public Const REG_DWORD_LITTLE_ENDIAN = 4
Public Const REG_EXPAND_SZ = 2
Public Const REG_FORCE_RESTORE = (&H8)
Public Const REG_FULL_RESOURCE_DESCRIPTOR = 9
Public Const REG_KEY_INSTDEV = ("Installed")
Public Const REG_LINK = 6
Public Const REG_NONE = 0
Public Const REG_MULTI_SZ = 7
Public Const REG_NOTIFY_CHANGE_ATTRIBUTES = &H2
Public Const REG_NOTIFY_CHANGE_LAST_SET = &H4
Public Const REG_NOTIFY_CHANGE_NAME = &H1
Public Const REG_NOTIFY_CHANGE_SECURITY = &H8
Public Const REG_NO_LAZY_FLUSH = &H4
Public Const REG_OPENED_EXISTING_KEY = &H2
Public Const REG_OPTION_BACKUP_RESTORE = 4
Public Const REG_OPTION_CREATE_LINK = 2
Public Const REG_OPTION_NON_VOLATILE = 0
Public Const REG_OPTION_OPEN_LINK = &H8
Public Const REG_OPTION_RESERVED = 0
Public Const REG_OPTION_VOLATILE = 1
Public Const REG_QWORD = 11
Public Const REG_QWORD_LITTLE_ENDIAN = 11
Public Const REG_REFRESH_HIVE = &H2
Public Const REG_RESOURCE_LIST = 8
Public Const REG_RESOURCE_REQUIREMENTS_LIST = 10
Public Const REG_RESTORE_LOG_KEY = "RegRestoreLogFile"
Public Const MORE_ROWS = -1
Public Const REG_ROW = MORE_ROWS
Public Const REG_SAVE_LOG_KEY = "RegSaveLogFile"
Public Const REG_SZ = 1
Public Const REG_WHOLE_HIVE_VOLATILE = &H1
Public Const REG_LEGAL_OPTION = (REG_OPTION_RESERVED Or REG_OPTION_NON_VOLATILE Or REG_OPTION_VOLATILE Or REG_OPTION_CREATE_LINK Or REG_OPTION_BACKUP_RESTORE)
Public Const REG_LEGAL_CHANGE_FILTER = (REG_NOTIFY_CHANGE_NAME Or REG_NOTIFY_CHANGE_ATTRIBUTES Or REG_NOTIFY_CHANGE_LAST_SET Or REG_NOTIFY_CHANGE_SECURITY)

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_DYN_DATA = &H80000006
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_USERS = &H80000003

Public Const ERROR_SUCCESS = 0&
Public Const ERROR_NONE = 0
Public Const ERROR_BADDB = 1
Public Const ERROR_BADKEY = 2
Public Const ERROR_CANTOPEN = 3
Public Const ERROR_CANTREAD = 4
Public Const ERROR_CANTWRITE = 5
Public Const ERROR_OUTOFMEMORY = 6
Public Const ERROR_INVALID_PARAMETER = 7
Public Const ERROR_ACCESS_DENIED = 8
Public Const ERROR_INVALID_PARAMETERS = 87
Public Const ERROR_NO_MORE_ITEMS = 259&

Public Const BUFFER_SIZE As Long = 255

Public Const READ_CONTROL = &H20000
Public Const SYNCHRONIZE = &H100000
wsboy001 2009-07-30
  • 打赏
  • 举报
回复
'从注册表中删除字符串值
Public Function DeleteValue(ByVal hKey As Long, ByVal strPath As String, ByVal strValue As String)
Dim r, keyhand As Long
r = RegOpenKey(hKey, strPath, keyhand)
r = RegDeleteValue(keyhand, strValue)
r = RegCloseKey(keyhand)
End Function
weiyulin 2009-07-30
  • 打赏
  • 举报
回复


能否给我一个 API 的方法
threenewbee 2009-07-30
  • 打赏
  • 举报
回复
当然也可以直接用 API。
threenewbee 2009-07-30
  • 打赏
  • 举报
回复
用 Windows Script Host 库。


大名鼎鼎的WSH听说过吗? 它就是Windows Script Host的缩写形式,WSH是Windows平台的脚本指令,它的功能十分强大,并且它还是利用语法结构简单、易学易用且功能强大的JScript和VBScript脚本语言,来实现其卓越的功能的,除了本文介绍的修改注册表之外,它还可以访问Excel文件,也能与网络沟通,当然它最大的优势莫过于它能与操作系统沟通,而修改注册表只是它与操作系统沟通的冰山一角。正是它有如此诸多的优点与实用性,正倍受很多Windows用户的青睐,本文就为大家介绍一二,让各位领略一下WSH的风采。
  用VBScript编写的WSH程序文件的扩展名为.vbs,该脚本程序在窗口界面是由wscript.exe文件解释执行的,在字符界面是由cscript.exe文件解释执行的,命令格式为:cscript filename.vbs
   
  创建对象
  用VBScript修改注册表,必须先创建一个能于操作系统沟通的对象,再利用该对象的各种方法对注册表进行操作,创建这个对象的方法和格式如下:
  Dim OperationRegistry
  Set OperationRegistry=WScript.CreateObject("WScript.Shell")
  上述这些代码就创建了一个能与操作系统沟通的对象OperationRegistry
   
  对象的方法
  有了以上这个对象,并不等于就能马上对注册表进行操作,我们还必须弄清该对象对注册表进行操作的几种重要方法.
  1.对注册表的读操作RegRead
  2.对注册表的写操作RegWrite
  3.对注册表的删操作RegDelete
  补充一点,WSH还有两个通用的方法:
  WScript.Echo()用来显示一串文本信息,相当于VB中的MsgBox()。
  Wscript.Quit()用来退出VBScript程序。
   
  方法的参数
  对于以上三种操作RegRead,RegWrite,RegDelete都需要带参数进行,并且这些操作的参数的个数和形式又不尽相同,下面我就把它们的一个共同且必不可少的参数讲一下:
  该参数可称作是"路径参数",它包括根键,主键路径和键值,各部分表示的方法如下:
  根键:
  根键有两种表示方法。
  方法一:直接用它在注册表中的字符串来表示,如:
  HKEY_CLASSES_ROOT,HKEY_CURRENT_USER等
  方法二:用缩写的四个字母来表示,前两个为HK,后两个即为根键单词的首字母。如:
  根键HKEY_CLASSES_ROOT表示为:HKCR, 根键HKEY_CURRENT_USER可表示为:HKCU等。
  主键路径:
  主键路径就是目标键在注册表中的主键位置,各个主键之间用"\"符分隔开。如:"Software\Microsoft\Windows\CurrentVersion\Policies\"
  键值:
  键值参数直接接在主键路径之后。例如一个完整的路径如下所示:
  "HKCR\Software\Microsoft\Windows\CurrentVersion\Policies\NoRun"
   
  方法详解
  1、RegRead操作详解
  读操作RegRead主要是用来读取注册表中主键的默认值或键值的数据,我们可以将读得的数据送到相应的变量中,再利用VB中的MsgBox()函数将该数据显示出来,这就达到了读取注册表中数据的目的(也可以利用对象OperationRegistry的方法Popup()将读取的数据送至屏幕), 例如:
  read.vbs(将以下代码存为read.vbs文件)
  Dim OperationRegistry
  Set OperationRegistry=WScript.CreateObject("WScript.Shell")
  Dim Read_Data1,Read_Data2
  Read_Data1=OperationRegistry.RegRead("HKCR\.xxf\")
  读取根键HKEY_CLASSES_ROOT之下的.xxf主键的默认值,并将该数据送至变量Read_Data1
  Read_Data2=OperationRegistry.RegRead("HKCR\.xxf\value")
  读取.xxf主键之下的value键值的数据,并将该数据送至变量Read_Data2
  MsgBox("Default="&Read_Data1&" value="&Read_Data2)
  将读取的数据显示出来
  2、RegWrite操作详解
  写操作RegWrite主要是用来在注册表中新建主键或键值,并要赋予给它们一个初始值,该操作同样可以对注册表中以存在的主键或键值进行数据的修改,因此写操作的参数结构就比读操作要复杂一些,它不仅要路径参数,还要一个初始值和类型参数.
  先来看初始值参数,该参数对于写操作来说是必不可少的,它可以为空(null)但却不能省掉。在新建主键时,初始值参数就赋给了该主键的默认值,在新建键值时,初始值参数就成了新建键值的初始数据.而初始值的类型,则是由类型参数决定的.类型主要有以下三种:
  (1)REG_SZ:字符型.该类型为缺省类型
  (2)REG_DWORD:双字节型.
  (3)REG_BINARY:二进制型.
  以上三种类型第1种和第2种用得最多,第3种类型在某些场合可以用第2种加以替代,这三种类型的赋值方法如下:
  对于REG_SZ型:直接用字符串赋予,如"text","string"等
  对于REG_DWORD型和REG_BINARY型则有两种赋值方式
  i)直接用十进制的数表示,如:0,1等.
  ii)用十六进制的数表示,如:0x12,0xff等. 看例:
  write.vbs
  Dim OperationRegistry
  Set OperationRegistry=WScript.CreateObject("WScript.Shell")
  Default=OperationRegistry.RegRead("HKCR\")
  获取一个空值 (null)

  OperationRegistry.RegWrite "HKCR\.xxf\",Default
  在根键HKEY_CLASSES_ROOT之下新建主键.xxf,并置其默认值为空

  OperationRegistry.RegWrite "HKCR\.xxf\","xxffile"
  在根键HKEY_CLASSES_ROOT之下新建主键.xxf,并置其默认值为"xxffile"
   
  OperationRegistry.RegWrite "HKCR\.xxf\value1","string"
  在主键.xxf之下新建一个字符串型键值value1,并置其初始值为"string"
   
  OperationRegistry.RegWrite "HKCR\.xxf\value2",1,"REG_DWORD"
  在主键.xxf之下新建一个REG_DWORD型键值value2,并置其初始值为1

  OperationRegistry.RegWrite "HKCR\.xxf\value3",0Xff,"REG_BINARY"
  在主键.xxf之下新建一个二进制型键值value3,并置其初始值为十六进制的ff
   
  3、RegDelete操作详解
  删除操作RegDelete主要是用来删除注册表中已存在的主键或键值,该操作是一种极其危险的操作,它能将主键或键值毫不留情的在注册表中"砍掉",无论该键值下面有多重要的数据,它都能畅行无阻,因此在使用该操作时务必小心。
  删除操作的参数形式与读操作的参数形式几乎完全相同,只是有一点小小的区别,那就是删除操作不需要将操作的返回值送给某一变量,例如:
  delete.vbs
  Dim OperationRegistry
  Set OperationRegistry=WScript.CreateObject("WScript.Shell")
  OperationRegistry.RegRead("HKCR\.xxf\value")
  删除.xxf主键之下的value键值
  OperationRegistry.RegRead("HKCR\.xxf\")
  删除根键HKEY_CLASSES_ROOT之下的.xxf主键
  强调一点,不要更改注册表中已存在的主键或键值,更不要将它们删除,因为对注册表进行了不当的写操作或删操作,情况严重的会导致系统崩溃!如果你真想这么做,那就请你作好注册表的备份。

  应用实例
  1、读本机"计算机名"
  ReadComputerName.vbs
  Dim ReadComputerName
  Set ReadComputerName=WScript.CreateObject("WScript.Shell")
  Dim ComputerName,RegPath
  RegPath="HKLM\System\CurrentControlSet\Control \ComputerName\ComputerName\ComputerName"
  ComputerName=ReadComputerName.RegRead(RegPath)
  MsgBox("计算机名为"&ComputerName)
  2、隐藏快捷方式图标上的小箭头
  Hidden.vbs
  Dim HiddenArrowIcon
  Set HiddenArrowIcon=WScript.CreateObject("WScript.Shell")
  Dim RegPath1,RegPath2
  RegPath1="HKCR\lnkfile\IsShortCut"
  RegPath2="HKCR\piffile\IsShortCut"
  HiddenArrowIcon.RegDelete(RegPath1)
  HiddenArrowIcon.RegDelete(RegPath2)
  3、改造"开始"菜单
  ChangeStartMenu.vbs
  Dim ChangeStartMenu
  Set ChangeStartMenu=WScript.CreateObject("WScript.Shell")
  RegPath="HKCR\Software\ Microsoft\Windows\CurrentVersion\Policies\"
  Type_Name="REG_DWORD"
  Key_Data=1

  StartMenu_Run="NoRun"
  StartMenu_Find="NoFind"
  StartMenu_Close="NoClose"

  Sub Change(Argument)
  ChangeStartMenu.RegWrite RegPath& Argument,Key_Data,Type_Name
  MsgBox("Success!")
  End Sub

  Call Change(StartMenu_Run) 禁用"开始"菜单中的"运行"功能
  Call Change(StartMenu_Find) 禁用"开始"菜单中的"查找"功能
  Call Change(StartMenu_Close) 禁用"开始"菜单中的"关闭系统"功能
  4、向Windows中添加自启动程序
  该程序能在开机时自动运行。
  AddAutoRunProgram.vbs
  假设该程序在c:\myfile文件夹中,文件名为autorun.exe
  Dim AutoRunProgram
  Set AutoRunProgram=WScript.CreateObject("WScript.Shell")
  RegPath="HKLM\Software\Microsoft\ Windows\CurrentVersion\Run\"
  Type_Name="REG_SZ"
  Key_Name="AutoRun"
  Key_Data="C:\Myfile\autorun.exe"
  该自启动程序的全路径文件名
  AutoRunProgram.Write RegPath&Key_Name,Key_Data,Type_Name
  在启动组中添加自启动程序autorun.exe
  MsgBox("Success!")
threenewbee 2009-07-30
  • 打赏
  • 举报
回复
教你个简单的办法,直接调用注册表命令行就可以了,详细请见:
http://topic.csdn.net/u/20070106/11/949713fa-54eb-47b9-bb01-f22f06068a26.html

至于调用,使用 VB 的 Shell 命令就可以了。
goosen 2009-07-29
  • 打赏
  • 举报
回复
http://www.vb-s.com.cn/source/chinese/api/34.zip

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧