VB.net 注册表操作API

来源:互联网 发布:c 定义json数组 编辑:程序博客网 时间:2024/04/29 10:22

VB.net 注册表操作API

'说明:该api只能在pc上使用,在wince上操作注册表需要利用Microsoft.WindowsMobile.Status库,使用方法如下:'Imports Microsoft.WindowsMobile.Status'Imports Microsoft.WindowsMobile.PocketOutlook''TextBox4.Text = Microsoft.WindowsMobile.Status.SystemState.CalendarHomeScreenAppointmentEndTime''如上所示,在windows mobile开发中,使用这一句话就可以获得注册表中CalendarHomeScreenAppointmentEndTime 这个键值的内容''附件内有windows mobile 注册表测试程序,并有mobile开发库,本实例为c#开发。'微软msdn库文档见此网址:'http://msdn.microsoft.com/en-us/library/bb158491'''PC端vb开发注册表API如下所示,所述api并不能直接使用,还需要完善,以下只提供方法。'Attribute VB_Name = "BasRegisty"Option Explicit OnImports System.Runtime.InteropServices '因为要获得API的访问Public Class RegClass'读写注册表任何地方的函数' 用法见下面' 摘自杨光宏 http://cako.126.com(VB技巧手册)'用于操作注册表的API函数定义 -begin-''以DllImport开始的函数功能类似于声明引用API函数  '<DllImport("advapi32.dll", SetLastError:=True)> _'Private Shared Function RegOpenKey(ByVal hKey As Long, ByVal lpSubKey As String, ByVal phkResult As Long) As Long'End FunctionDeclare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal phkResult As Long) As LongDeclare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByVal phkResult As Long) As LongDeclare 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 LongDeclare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As Object, ByVal cbData As Long) As LongDeclare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, ByVal lpcbValue As Long) As LongDeclare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByVal lpType As Long, ByVal lpData As Object, ByVal lpcbData As Long) As LongDeclare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongDeclare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal phkResult As Long) As LongDeclare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As LongDeclare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long'用于操作注册表的API函数定义 -end-'用于操作注册表的常数定义 -begin-'预定义的根结点Public Const HKEY_CLASSES_ROOT = &H80000000Public Const HKEY_CURRENT_CONFIG = &H80000005Public Const HKEY_CURRENT_USER = &H80000001Public Const HKEY_DYN_DATA = &H80000006Public Const HKEY_LOCAL_MACHINE = &H80000002Public Const HKEY_PERFORMANCE_DATA = &H80000004Public Const HKEY_USERS = &H80000003'预定义的键值类型Public Const REG_NONE = 0Public Const REG_SZ = 1Public Const REG_EXPAND_SZ = 2Public Const REG_BINARY = 3Public Const REG_DWORD = 4Public Const REG_DWORD_LITTLE_ENDIAN = 4Public Const REG_DWORD_BIG_ENDIAN = 5Public Const REG_LINK = 6Public Const REG_MULTI_SZ = 7Public Const REG_RESOURCE_LIST = 8Public Const REG_FULL_RESOURCE_DESCRIPTOR = 9Public Const REG_RESOURCE_REQUIREMENTS_LIST = 10#If WinNT Then'打开注册文件的方式Public Const KEY_EVENT = &H1Public Const KEY_NOTIFY = &H10Public Const KEY_QUERY_VALUE = &H1Public Const KEY_SET_VALUE = &H2Public Const KEY_CREATE_SUB_KEY = &H4Public Const KEY_ENUMERATE_SUB_KEYS = &H8Public Const KEY_CREATE_LINK = &H20Public 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))#End If'注册文件错误描述Const ERROR_SUCCESS = 0&Const ERROR_BADDB = 1009&Const ERROR_BADKEY = 1010&Const ERROR_CANTOPEN = 1011&Const ERROR_CANTREAD = 1012&Const ERROR_CANTWRITE = 1013&Const ERROR_REGISTRY_RECOVERED = 1014&Const ERROR_REGISTRY_CORRUPT = 1015&Const ERROR_REGISTRY_IO_FAILED = 1016&Const ERROR_NOT_REGISTRY_FILE = 1017&Const ERROR_KEY_DELETED = 1018&Const ERROR_NO_LOG_SPACE = 1019&Const ERROR_KEY_HAS_CHILDREN = 1020&Const ERROR_CHILD_MUST_BE_VOLATILE = 1021&Const ERROR_RXACT_INVALID_STATE = 1369&' 自定义注册文件错误Const REGAGENT_NOKEY = -1002Const REGAGENT_NOSUBKEY = -1003Public glStatus As Long'用于操作注册表的常数定义 -end-''''功 能:从注册表中取得串值'参 数:' 输入: plKey Long 根键名' psKey String 主键名' psSubKey String 子键名' 输出: gfsGetKeyStringValue String 取得的注册表串值'''' 影响: glStatus Long 状态值Function gfsGetKeyStringValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String) As StringDim llKeyID As Long '打开键的IDDim llBufferSize As Long '需读取串的串值长度Dim lsKeyValue As String '存放读取的串值'预先置为空gfsGetKeyStringValue = NothingglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置(子键未设置则读默认值)glStatus = REGAGENT_NOKEYExit FunctionEnd If'首先打开主键glStatus = RegOpenKey(plKey, psKey, llKeyID)If glStatus = ERROR_SUCCESS Then '成功则取需读取字串的串值大小glStatus = RegQueryValueEx(llKeyID, psSubKey, 0&, REG_SZ, 0&, llBufferSize)If llBufferSize < 2 Then '空值glStatus = RegCloseKey(llKeyID)Else '有值,正式读取串值lsKeyValue = Space(llBufferSize + 1)glStatus = RegQueryValueEx(llKeyID, psSubKey, 0&, REG_SZ, lsKeyValue, llBufferSize)If glStatus = ERROR_SUCCESS ThengfsGetKeyStringValue = Left$(lsKeyValue, llBufferSize - 1)End IfglStatus = RegCloseKey(llKeyID)End IfEnd IfReturn gfsGetKeyStringValue '查询结果返回End FunctionFunction gflGetKeyBinaryValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String) As Long'功 能:从注册表中取得二进制值'参 数:' 输入: plKey Long 根键名' psKey String 主键名' psSubKey String 子键名' 输出: gflGetKeyBinaryValue Long 取得的注册表二进制值' 影响: glStatus Long 状态值Dim llKeyID As Long '打开键的IDDim llKeyValue As Long '存放读取的二进制值'预先置为空gflGetKeyBinaryValue = NothingglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置(子键未设置则读默认值)glStatus = REGAGENT_NOKEYExit FunctionEnd If'首先打开主键glStatus = RegOpenKey(plKey, psKey, llKeyID)If glStatus = ERROR_SUCCESS Then '成功则取二进制值glStatus = RegQueryValueEx(llKeyID, psSubKey, 0&, REG_BINARY, llKeyValue, Len(llKeyValue))If glStatus = ERROR_SUCCESS ThengflGetKeyBinaryValue = llKeyValueEnd IfglStatus = RegCloseKey(llKeyID)End IfReturn gflGetKeyBinaryValueEnd FunctionFunction gflGetKeyDwordValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String) As Long'ok'功 能:从注册表中取得双字值'参 数:' 输入: plKey Long 根键名' psKey String 主键名' psSubKey String 子键名' 输出: gflGetKeyDwordValue Long 取得的注册表双字值' 影响: glStatus Long 状态值Dim llKeyID As Long '打开键的IDDim llKeyValue As Long '存放读取的双字值'预先置为空gflGetKeyDwordValue = NothingglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置(子键未设置则读默认值)glStatus = REGAGENT_NOKEYExit FunctionEnd If'首先打开主键glStatus = RegOpenKey(plKey, psKey, llKeyID)If glStatus = ERROR_SUCCESS Then '成功则取双字值glStatus = RegQueryValueEx(llKeyID, psSubKey, 0&, REG_DWORD, llKeyValue, Len(llKeyValue))If glStatus = ERROR_SUCCESS ThengflGetKeyDwordValue = llKeyValueEnd IfglStatus = RegCloseKey(llKeyID)End IfReturn gflGetKeyDwordValueEnd FunctionSub gpvSetKeyStringValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String, ByVal psKeyValue As String)'ok'功 能:设置注册表中的串值'参 数:' 输入: plKey Long 根键名' psKey String 主键名' psSubKey String 子键名' psKeyValue String 要设置的串值' 输出: 无' 影响: glStatus Long 状态值Dim llKeyID As Long '打开键的IDglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置(子键未设置则读默认值)glStatus = REGAGENT_NOKEYExit SubEnd If'首先打开主键glStatus = RegOpenKey(plKey, psKey, llKeyID)If glStatus = ERROR_SUCCESS Then '成功则设置值If Len(psKeyValue) = 0 Then '设为空值glStatus = RegSetValueEx(llKeyID, psSubKey, 0&, REG_SZ, 0&, 0&)Else '设为正常值glStatus = RegSetValueEx(llKeyID, psSubKey, 0&, REG_SZ, psKeyValue, Len(psKeyValue) + 1)End IfglStatus = RegCloseKey(llKeyID)End IfEnd SubSub gpvSetKeyDwordValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String, ByVal plKeyValue As Long)'ok'功 能:设置注册表中的双字值'参 数:' 输入: plKey Long 根键名' psKey String 主键名' psSubKey String 子键名' plKeyValue Long 要设置双字值' 输出: 无' 影响: glStatus Long 状态值Dim llKeyID As Long '打开键的IDglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置(子键未设置则读默认值)glStatus = REGAGENT_NOKEYExit SubEnd If'首先打开主键glStatus = RegOpenKey(plKey, psKey, llKeyID)If glStatus = ERROR_SUCCESS Then '成功则设置值glStatus = RegSetValueEx(llKeyID, psSubKey, 0&, REG_DWORD, plKeyValue, Len(plKeyValue))glStatus = RegCloseKey(llKeyID)End IfEnd SubSub gpvSetKeyBinaryValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String, ByVal plKeyValue As Long)'ok'功 能:设置注册表中的二进制值'参 数:' 输入: plKey Long 根键名' psKey String 主键名' psSubKey String 子键名' plKeyValue Long 要设置的二进制值' 输出: 无' 影响: glStatus Long 状态值Dim llKeyID As Long '打开键的IDglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置(子键未设置则读默认值)glStatus = REGAGENT_NOKEYExit SubEnd If'首先打开主键glStatus = RegOpenKey(plKey, psKey, llKeyID)If glStatus = ERROR_SUCCESS Then '成功则设置值glStatus = RegSetValueEx(llKeyID, psSubKey, 0&, REG_BINARY, plKeyValue, Len(plKeyValue))glStatus = RegCloseKey(llKeyID)End IfEnd SubFunction gflCreateKey(ByVal plKey As Long, ByVal psKey As String) As Long'ok'功 能:创建注册表中的主键'参 数:' 输入: plKey Long 根键名' psKey String 主键名' 输出: gflCreateKey Long 创建的主键ID' 影响: glStatus Long 状态值Dim llKeyID As Long '键IDglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置glStatus = REGAGENT_NOKEYExit FunctionEnd If'创建主键glStatus = RegCreateKey(plKey, psKey, llKeyID)If glStatus = ERROR_SUCCESS ThengflCreateKey = llKeyIDEnd IfReturn gflCreateKeyEnd FunctionSub gpvDeleteKey(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String)'ok'功 能:删除注册表中的主键'参 数:' 输入: plKey Long 根键名' psKey String 主键名' psSubKey String 子键名' 输出: 无' 影响: glStatus Long 状态值Dim llKeyID As Long '键IDglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置glStatus = REGAGENT_NOKEYExit SubEnd If'利用创建主键判断是否存在主键glStatus = RegCreateKey(plKey, psKey, llKeyID)glStatus = RegDeleteKey(llKeyID, psSubKey)End SubSub gpvDeleteKeyValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String)'ok'功 能:删除注册表中的键值'参 数:' 输入: plKey Long 根键名' psKey String 主键名' psSubKey String 子键名' 输出: 无' 影响: glStatus Long 状态值Dim llKeyID As Long '键IDglStatus = ERROR_SUCCESS '假设成功'确定参数有效If Len(psKey) = 0 Then '主键未设置glStatus = REGAGENT_NOKEYExit SubEnd If'利用创建主键判断是否存在主键glStatus = RegCreateKey(plKey, psKey, llKeyID)glStatus = RegDeleteValue(llKeyID, psSubKey)End Sub'Function gfsGetKeyStringValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String) As String'功 能:从注册表中取得串值'Function gflGetKeyBinaryValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String) As Long'功 能:从注册表中取得二进制值'Function gflGetKeyDwordValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String) As Long'功 能:从注册表中取得双字值'Sub gpvSetKeyStringValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String, ByVal psKeyValue As String)'功 能:设置注册表中的串值'Sub gpvSetKeyDwordValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String, ByVal plKeyValue As Long)'功 能:设置注册表中的双字值'Sub gpvSetKeyBinaryValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String, ByVal plKeyValue As Long)'功 能:设置注册表中的二进制值'Function gflCreateKey(ByVal plKey As Long, ByVal psKey As String) As Long'功 能:创建注册表中的主键'Sub gpvDeleteKey(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String)'功 能:删除注册表中的主键'Sub gpvDeleteKeyValue(ByVal plKey As Long, ByVal psKey As String, ByVal psSubKey As String)'功 能:删除注册表中的键值End Class
0 0