`
mmdev
  • 浏览: 13304362 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

注册表读写操作(模块)

 
阅读更多

*************************************************************************
'**模 块 名:RegWork
'**创 建 人:叶帆
'**日 期:2003年01月11日
'**修 改 人:
'**日 期:
'**描 述:注册表操作(不同类型,读写方法有一定区别)
'**版 本:版本1.0
'*************************************************************************
'---------------------------------------------------------------
'-注册表 API 声明...
'---------------------------------------------------------------
'关闭登录关键字
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
'建立关键字
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32" 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, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Long, ByRef lpdwDisposition As Long) As Long
'打开关键字
Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long
'返回关键字的类型和值
Private Declare Function RegQueryValueEx_SZ Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long
Private Declare Function RegQueryValueEx_DWORD Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Private Declare 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, ByRef lpcbData As Long) As Long

'将文本字符串与指定关键字关联
Private Declare Function RegSetValueEx_SZ Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Private Declare Function RegSetValueEx_DWORD Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Long, ByVal cbData As Long) As Long
Private Declare Function RegSetValueEx_BINARY Lib "advapi32" 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

'删除关键字
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
'从登录关键字中删除一个值
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long

'---------------------------------------------------------------
'- 注册表 Api 常数...
'---------------------------------------------------------------
' 注册表的数据类型
Public Enum REGValueType
[REG_SZ] = 1 ' Unicode空终结字符串
[REG_EXPAND_SZ] = 2 ' Unicode空终结字符串
[REG_BINARY] = 3 ' 二进制数值
[REG_DWORD] = 4 ' 32-bit 数字
[REG_DWORD_BIG_ENDIAN] = 5
[REG_LINK] = 6
[REG_MULTI_SZ] = 7 ' 二进制数值串
End Enum

' 注册表创建类型值...
Const REG_OPTION_NON_VOLATILE = 0 ' 当系统重新启动时,关键字被保留

' 注册表关键字安全选项...
Const READ_CONTROL = &H20000
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL
Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL
Const KEY_EXECUTE = KEY_READ
Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + _
KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + _
KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL

' 注册表关键字根类型...
Public Enum REGRoot
[HKEY_CLASSES_ROOT] = &H80000000
[HKEY_CURRENT_USER] = &H80000001
[HKEY_LOCAL_MACHINE] = &H80000002
[HKEY_USERS] = &H80000003
[HKEY_PERFORMANCE_DATA] = &H80000004
End Enum

' 返回值...
Const ERROR_NONE = 0
Const ERROR_BADKEY = 2
Const ERROR_ACCESS_DENIED = 8
Const ERROR_SUCCESS = 0


'---------------------------------------------------------------
'- 注册表安全属性类型...
'---------------------------------------------------------------
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type

'*************************************************************************
'**函 数 名:WriteRegKey
'**输 入:ByVal KeyRoot(REGRoot) - 根
'** :ByVal KeyName(String) - 键的路径
'** :ByVal SubKeyName(String) - 键名
'** :ByVal SubKeyType(REGValueType) - 键的类型
'** :ByVal SubKeyValue(String) - 键值
'**输 出:(Boolean) - 成功返回True,失败返回False
'**功能描述:写注册表
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2003年01月10日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Function WriteRegKey(ByVal KeyRoot As REGRoot, ByVal KeyName As String, ByVal SubKeyName As String, ByVal SubKeyType As REGValueType, ByVal SubKeyValue As String) As Boolean
Dim rc As Long ' 返回代码
Dim hKey As Long ' 处理一个注册表关键字
Dim hDepth As Long '
Dim lpAttr As SECURITY_ATTRIBUTES ' 注册表安全类型
Dim i As Integer
Dim bytValue(1024) As Byte

lpAttr.nLength = 50 ' 设置安全属性为缺省值...
lpAttr.lpSecurityDescriptor = 0 ' ...
lpAttr.bInheritHandle = True ' ...

'------------------------------------------------------------
'- 创建/打开注册表关键字...
'------------------------------------------------------------
rc = RegCreateKeyEx(KeyRoot, KeyName, 0, SubKeyType, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, hKey, hDepth) ' 创建/打开//KeyRoot//KeyName

If (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError ' 错误处理...

'------------------------------------------------------------
'- 创建/修改关键字值...
'------------------------------------------------------------
If (SubKeyValue = "") Then SubKeyValue = " " ' 要让RegSetValueEx() 工作需要输入一个空格...
Select Case SubKeyType ' 搜索数据类型...
Case REG_SZ, REG_EXPAND_SZ ' 字符串注册表关键字数据类型
'------------------------------------------------------------------
rc = RegSetValueEx_SZ(hKey, SubKeyName, 0, SubKeyType, ByVal SubKeyValue, LenB(StrConv(SubKeyValue, vbFromUnicode)))
If (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError ' 错误处理
'------------------------------------------------------------------
Case REG_DWORD ' 四字节注册表关键字数据类型
'-------------------------------------------------------------------
rc = RegSetValueEx_DWORD(hKey, SubKeyName, 0, SubKeyType, Val("&h" + SubKeyValue), 4)
If (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError ' 错误处理
'-------------------------------------------------------------------
Case REG_BINARY ' 二进制字符串
'-------------------------------------------------------------------
Dim intNum As Integer
intNum = 0
For i = 1 To Len(Trim(SubKeyValue)) - 1 Step 3
intNum = intNum + 1
bytValue(intNum - 1) = Val("&h" + Mid(SubKeyValue, i, 2))
Next i

rc = RegSetValueEx_BINARY(hKey, SubKeyName, 0, SubKeyType, bytValue(0), intNum)
If (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError ' 错误处理
'-------------------------------------------------------------------
Case Else
'--------------------------------------------------------------------
GoTo CreateKeyError ' 错误处理
'--------------------------------------------------------------------
End Select

'- 关闭注册表关键字...
'------------------------------------------------------------
rc = RegCloseKey(hKey) ' 关闭关键字
WriteRegKey = True ' 返回成功
Exit Function ' 退出
'---------------------------------------------------------------------------------------------
CreateKeyError:
WriteRegKey = False ' 设置错误返回代码
rc = RegCloseKey(hKey) ' 试图关闭关键字
End Function

'*************************************************************************
'**函 数 名:ReadRegKey
'**输 入:KeyRoot(Long) - 根
'** :KeyName(String) - 键的路径
'** :SubKeyRef(String) - 键名
'**输 出:(String) - 返回键值
'**功能描述:读注册表
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2003年01月10日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Function ReadRegKey(ByVal KeyRoot As REGRoot, ByVal KeyName As String, ByVal SubKeyName As String) As String
Dim i As Long ' 循环计数器
Dim rc As Long ' 返回代码
Dim hKey As Long ' 处理打开的注册表关键字
Dim hDepth As Long '
Dim sKeyVal As String
Dim lKeyValType As Long ' 注册表关键字数据类型
Dim tmpVal As String ' 注册表关键字的临时存储器
Dim KeyValSize As Long ' 注册表关键字变量尺寸
Dim lngValue As Long
Dim bytValue(1024) As Byte

'------------------------------------------------------------
' 在 KeyRoot下打开注册表关键字
'------------------------------------------------------------
rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' 打开注册表关键字

If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' 处理错误...

'------------------------------------------------------------
' 检测键的类型
'------------------------------------------------------------
rc = RegQueryValueEx(hKey, SubKeyName, 0, lKeyValType, ByVal 0, KeyValSize) ' 获得/创建关键字的值

If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' 处理错误...

'------------------------------------------------------------
'读相应的键值
'------------------------------------------------------------
Select Case lKeyValType ' 搜索数据类型...
Case REG_SZ, REG_EXPAND_SZ ' 字符串注册表关键字数据类型
'--------------------------------
tmpVal = String$(1024, 0) ' 分配变量空间
KeyValSize = 1024 ' 标记变量尺寸

rc = RegQueryValueEx_SZ(hKey, SubKeyName, 0, 0, tmpVal, KeyValSize) ' 获得/创建关键字的值
If rc <> ERROR_SUCCESS Then GoTo GetKeyError ' 错误处理


If InStr(tmpVal, Chr(0)) > 0 Then sKeyVal = Left(tmpVal, InStr(tmpVal, Chr(0)) - 1) ' 复制字符串的值
'--------------------------------
Case REG_DWORD ' 四字节注册表关键字数据类型
'--------------------------------
KeyValSize = 1024 ' 标记变量尺寸
rc = RegQueryValueEx_DWORD(hKey, SubKeyName, 0, 0, lngValue, KeyValSize) ' 获得/创建关键字的值
If rc <> ERROR_SUCCESS Then GoTo GetKeyError ' 错误处理
sKeyVal = "0x" + Hex(lngValue)
'--------------------------------
Case REG_BINARY ' 二进制字符串
'--------------------------------
rc = RegQueryValueEx(hKey, SubKeyName, 0, 0, bytValue(0), KeyValSize) ' 获得/创建关键字的值

If rc <> ERROR_SUCCESS Then GoTo GetKeyError ' 错误处理

sKeyVal = ""
For i = 1 To KeyValSize

If Len(Hex$(bytValue(i - 1))) = 1 Then
sKeyVal = sKeyVal + "0" + Hex(bytValue(i - 1)) + " "
Else
sKeyVal = sKeyVal + Hex(bytValue(i - 1)) + " "
End If

Next i

'--------------------------------
Case Else
'--------------------------------
sKeyVal = ""
'--------------------------------
End Select

'----------------------------------------
ReadRegKey = sKeyVal ' 返回值
rc = RegCloseKey(hKey) ' 关闭注册表关键字
Exit Function ' 退出
'----------------------------------------------------------------------------------------------
GetKeyError: ' 错误发生过后进行清除...
ReadRegKey = "" ' 设置返回值为错误
rc = RegCloseKey(hKey) ' 关闭注册表关键字
End Function

'*************************************************************************
'**函 数 名:DelRegKey
'**输 入:KeyRoot(Long) - 根
'** :KeyName(String) - 键的路径
'** :SubKeyRef(String) - 键名
'**输 出:(Long) - 状态码
'**功能描述:删除关键字
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2003年01月11日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Function DelRegKey(ByVal KeyRoot As REGRoot, ByVal KeyName As String, ByVal SubKeyName As String) As Long

Dim lKeyId As Long
Dim lResult As Long

DelRegKey = 0 ' 假定成功

'检测设置的参数
If Len(KeyName) = 0 And Len(SubKeyName) = 0 Then
' 键值没设置则返回相应错误码
DelRegKey = ERROR_BADKEY
Exit Function
End If

' 打开关键字并尝试创建它,如果已存在,则返回ID值
lResult = RegCreateKey(KeyRoot, KeyName, lKeyId)

If lResult = 0 Then
'删除关键字
DelRegKey = RegDeleteKey(lKeyId, ByVal SubKeyName)
End If

End Function
'*************************************************************************
'**函 数 名:DelRegValue
'**输 入:KeyRoot(Long) - 根
'** :KeyName(String) - 键的路径
'** :SubKeyRef(String) - 键名
'**输 出:(Long) - 状态码
'**功能描述:从登录关键字中删除一个值
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2003年01月11日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Function DelRegValue(ByVal KeyRoot As REGRoot, ByVal KeyName As String, ByVal SubKeyName As String) As Long

Dim lKeyId As Long
Dim lResult As Long

DelRegValue = 0 ' 假定成功

'检测设置的参数
If Len(KeyName) = 0 And Len(SubKeyName) = 0 Then
' 键值没设置则返回相应错误码
DelRegValue = ERROR_BADKEY
Exit Function
End If

' 打开关键字并尝试创建它,如果已存在,则返回ID值
lResult = RegCreateKey(KeyRoot, KeyName, lKeyId)

If lResult = 0 Then
'从登录关键字中删除一个值
DelRegValue = RegDeleteValue(lKeyId, ByVal SubKeyName)
End If

End Function

分享到:
评论

相关推荐

    易语言注册表读写增强模块

    在易语言中,注册表读写操作是系统管理和配置的重要组成部分。注册表存储了计算机系统的各种设置和信息,包括软件、硬件、用户配置等,因此,能够高效且安全地进行注册表读写对程序功能的实现至关重要。 "易语言...

    易语言注册表读写增强模块+例程

    “注册表读写增强模块”是一个专门用于提升易语言程序对注册表操作功能的扩展模块。注册表是Windows操作系统中的一个重要数据库,存储着系统和应用程序的各种设置信息。通过这个增强模块,开发者可以更方便、更安全...

    易语言源码注册表读写增强模块.rar

    易语言源码注册表读写增强模块.rar 易语言源码注册表读写增强模块.rar 易语言源码注册表读写增强模块.rar 易语言源码注册表读写增强模块.rar 易语言源码注册表读写增强模块.rar 易语言源码注册表读写增强模块....

    近在眼前-注册表读写增强模块应用例程

    注册表读写增强模块,源码主要讲解的是注册表读写增强模块的应用教程。@易语言学习论坛-近在眼前。

    近在眼前-注册表读写增强模块+例程.rar

    近在眼前-注册表读写增强模块+例程.rar 近在眼前-注册表读写增强模块+例程.rar 近在眼前-注册表读写增强模块+例程.rar 近在眼前-注册表读写增强模块+例程.rar 近在眼前-注册表读写增强模块+例程.rar ...

    易语言源码易语言注册表读写增强模块源码.rar

    易语言源码易语言注册表读写增强模块源码.rar 易语言源码易语言注册表读写增强模块源码.rar 易语言源码易语言注册表读写增强模块源码.rar 易语言源码易语言注册表读写增强模块源码.rar 易语言源码易语言注册表...

    完整版注册表读写增强模块.rar

    注册表读写增强模块是计算机系统中用于优化和扩展对注册表操作的重要工具。注册表是Windows操作系统的核心组件,存储着系统配置、软件设置以及硬件设备等关键信息。这个压缩包文件“完整版注册表读写增强模块.rar”...

    完整版注册表读写增强模块应用例程.rar

    本教程将深入探讨“完整版注册表读写增强模块应用例程”,帮助你理解如何高效且安全地操作注册表。 首先,我们要明白注册表的基本结构。注册表由几个主要部分组成:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_...

    注册表读写增强模块.zip易语言项目例子源码下载

    注册表读写增强模块.zip易语言项目例子源码下载注册表读写增强模块.zip易语言项目例子源码下载注册表读写增强模块.zip易语言项目例子源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.适合小团队...

    完整版近在眼前-注册表读写增强模块+例程.rar

    "完整版近在眼前-注册表读写增强模块+例程.rar"这个压缩包文件显然包含了针对注册表操作的优化和扩展工具,以及相关的代码示例。 注册表读写增强模块可能是一个动态链接库(DLL)或其他形式的程序,其设计目的是...

    完整版注册表读写增强模块+例程.rar

    "完整版注册表读写增强模块+例程.rar"是一个包含有关如何高效、安全地操作注册表的资源包。这个压缩文件很可能是为程序员或系统管理员提供的,帮助他们理解和实现对注册表的高级操作。 首先,我们要理解注册表读写...

    易语言注册表操作增强模块

    通过这个模块,开发者可以实现对注册表的读写、创建、删除、查询等一系列高级操作,无需深入了解注册表的底层结构和复杂性。 注册表操作通常包括以下几个方面: 1. **读取注册表键值**:在易语言中,使用注册表...

    vb读写注册表模块 visual basic 6.0读写注册表模块 *.bas

    visual basic 6.0读写注册表模块

    VC++文件操作与注册表读写操作

    在VC++编程中,文件操作和注册表读写是两个重要的功能模块,它们在软件开发中扮演着不可或缺的角色。文件操作允许程序与硬盘上的数据进行交互,而注册表读写则涉及程序对系统配置信息的管理和修改。接下来,我们将...

    完整版注册表操作增强模块1.32.rar

    注册表操作增强模块则是一个专门用于管理和编辑注册表的工具,可以提供比Windows自带的注册表编辑器更为强大和精细的功能。 在“完整版注册表操作增强模块1.32”中,我们可以期待以下关键知识点: 1. **高级搜索与...

    易语言-近在眼前-注册表读写增强模块应用例程

    本应用例程主要探讨的是如何利用易语言的注册表读写增强模块来高效地进行注册表操作。 一、注册表结构与键值类型 在Windows系统中,注册表分为多个根键,如HKEY_LOCAL_MACHINE(本地机器)、HKEY_CURRENT_USER...

Global site tag (gtag.js) - Google Analytics