在VB中调用API操作注册表

上传人:宝路 文档编号:21463819 上传时间:2017-11-23 格式:DOC 页数:6 大小:45.06KB
返回 下载 相关 举报
在VB中调用API操作注册表_第1页
第1页 / 共6页
在VB中调用API操作注册表_第2页
第2页 / 共6页
在VB中调用API操作注册表_第3页
第3页 / 共6页
在VB中调用API操作注册表_第4页
第4页 / 共6页
在VB中调用API操作注册表_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《在VB中调用API操作注册表》由会员分享,可在线阅读,更多相关《在VB中调用API操作注册表(6页珍藏版)》请在金锄头文库上搜索。

1、在 VB 中调用 API 操作注册表2001-09-27 陈劲宏整理yesky有时候我们需要读取某个 Key 下的所有名称的值,找到特定的或者全部名称的值以作它用,比如我在编写清除著名的木马冰河 服务器端程序时,就需要查找 HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun 下的所有可疑的加载程序项目然后删除之。要用到的 API 函数的详细描述参看“注册表编程相关函数”一文。一个完整的例子如下:*EnumVal2.bas*Option Explicit Public Const HKEY_CLASSES_ROOT = &H80

2、000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Public Const REG_NONE = 0 Public

3、Const REG_SZ = 1 Public Const REG_EXPAND_SZ = 2 Public Const REG_BINARY = 3Public Const REG_DWORD = 4 Public Const REG_DWORD_BIG_ENDIAN = 5 Public Const REG_MULTI_SZ = 7 注意以下的函数声明须在一行内写完Declare Function RegOpenKey Lib advapi32.dll Alias RegOpenKeyA (ByVal hKey As Long, ByVal lpSubKey As String, phkR

4、esult As Long) As Long Declare Function RegCloseKey Lib advapi32.dll (ByVal hKey As Long) As Long Declare Function RegQueryValue Lib advapi32.dll Alias RegQueryValueA (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As LongDeclare Function RegQueryValueEx Li

5、b 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 Declare Function RegEnumValue Lib advapi32.dll Alias RegEnumValueA (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName

6、As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long Declare Function RegEnumValueAsAny Lib advapi32.dll Alias RegEnumValueA (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long,

7、lpType As Long, lpData As Any, lpcbData As Long) As Long Declare Function RegEnumValueAsAny2 Lib advapi32.dll Alias RegEnumValueA (ByVal hKey As Long, ByVal dwIndex As Long, lpValueName As Any, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Declar

8、e Function ExpandEnvironmentStrings Lib kernel32 Alias ExpandEnvironmentStringsA (ByVal lpSrc As String, ByVal lpDst As String, ByVal nSize As Long) As Long Sub MultiStringToStringArray(S As String, S2() As String)S 为我们读取出来的多重字符串S2 为转换后的字符串数组Dim count As Integer, pos As Integer, pos2 As Integer, idx

9、 As Integer pos = InStr(S, Chr(0)While pos 0 count = count + 1 pos = InStr(pos + 1, S, Chr(0) Wend 取得多重字符串中的字符串个数count = count - 1 ReDim S2(0 To count - 1) pos = 1 For idx = 0 To count - 1 pos2 = InStr(pos, S, Chr(0) S2(idx) = Mid(S, pos, pos2 - pos) pos = pos2 + 1 Next End Sub在 form 中添加 command 按钮和

10、 text 文本框*EnumVal2.frm*以下的 Command1_Click 事件中我们将列举出HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun 下的所有 name 及其 Value.Private Sub Command1_Click() Dim hKey As Long, ret As Long, lenData As Long, typeData As Long Dim Name As StringDim lenName As Long Dim idx As Integer, j As Integer Dim b

11、Name(256) As Byte ret = RegOpenKey(HKEY_LOCAL_MACHINE, SoftwareMicrosoftWindowsCurrentVersionRun, hKey) If ret 0 Then RegCloseKey hKey Exit Sub End If 上面的 RegEnumValueAsAny2 调用得到了第一个 Name 的长度 lenName,不含 chr(0)Name = String(lenName + 1, Chr(0) lenName = Len(Name) Select Case typeData Case REG_SZ, REG

12、_EXPAND_SZ, REG_MULTI_SZ Dim S As String S = String(lenData, Chr(0) RegEnumValueAsAny hKey, idx, Name, lenName, ByVal 0, typeData, ByVal S, lenData If typeData = REG_SZ Then S = Left(S, InStr(S, Chr(0) - 1) Text1.SelText=IIf(lenName=0, (预设值),Left(Name,InStr(Name,Chr(0)-1) & = & S & vbCrLf ElseIf typ

13、eData = REG_EXPAND_SZ Then Dim S2 As String S2 = String(Len(S) + 256, Chr(0) ExpandEnvironmentStrings S, S2, Len(S2) S = Left(S2, InStr(S2, Chr(0) - 1) Text1.SelText = Left(Name, InStr(Name, Chr(0) - 1) & = & S & vbCrLf ElseIf typeData = REG_MULTI_SZ Then Dim SArr() As String MultiStringToStringArra

14、y S, SArr For j = 0 To UBound(SArr) Text1.SelText = Left(Name, InStr(Name, Chr(0) - 1) & ( & j & ) = & SArr(j) & vbCrLf Next End If Case REG_DWORD, REG_DWORD_BIG_ENDIAN Dim L As Long RegEnumValueAsAny hKey, idx, Name, lenName, ByVal 0, typeData, L, lenData Text1.SelText = Left(Name, InStr(Name, Chr(

15、0) - 1) & = & L & vbCrLf Case REG_BINARY ReDim bArr(0 To lenData - 1) As Byte RegEnumValueAsAny hKey, idx, Name, lenName, ByVal 0, typeData, bArr(0), lenData Text1.SelText = Left(Name, InStr(Name, Chr(0) - 1) & = For j = 0 To UBound(bArr) Text1.SelText = Hex(bArr(j) & Next Text1.SelText = vbCrLf End

16、 Select idx = idx + 1 Wend RegCloseKey hKey End Sub对注册表进行编程的“捷径”2001-09-29 -yesky我们知道,在 VB 中,可以用 SHELL 函数来执行一个可执行文件。而对注册表的访问可以方便地用 Regedit.exe 命令将它与一文本文件联系进来。这样一来,我们无需掌握高深的 API 函数,需编程对该文本文件进行处理即可。首先,注册表中各个主键和子键的键值,一般来说有以下几种类型:REG_SZ(普通字符串 )REG_EXPAND_SZ(可展开式字串)REG_BINARY(二进制)REG_DWORD(长整数型,即十六进制值 )。他们在导出的注册表文件中的表示形式不尽相同。具体

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号