2019独角兽企业重金招聘Python工程师标准>>>

有时候我们需要读取某个Key下的所有名称的值,找到特定的或者全部名称的值以作它用,比如我在编写清除著名的"木马冰河" 服务器端程序时,就需要查找HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run下的所有可疑的加载程序项目然后删除之。

  要用到的API函数的详细描述参看“注册表编程相关函数”一文。一个完整的例子如下:

'EnumVal2.bas**

Option Explicit Public Const HKEY_CLASSES_ROOT = &H80000000 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 Const REG_SZ = 1 Public Const REG_EXPAND_SZ = 2 Public Const REG_BINARY = 3 Public 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, phkResult 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 Long

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, lpcbData As Long) As Long

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

Declare 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 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按钮和text文本框

'EnumVal2.frm****

'以下的Command1_Click事件中我们将列举出'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run下的所有name及其Value. Private Sub Command1_Click() Dim hKey As Long, ret As Long, lenData As Long, typeData As Long Dim Name As String Dim lenName As Long Dim idx As Integer, j As Integer Dim bName(256) As Byte ret = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", hKey) If ret <> 0 Then Exit Sub

ret = 0 idx = 0 While ret = 0 lenName = 256

ret=RegEnumValueAsAny2(hKey,idx,bName(0),lenName,ByVal 0,typeData,ByVal vbNullString, lenData) 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_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 typeData = 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 MultiStringToStringArray 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(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 Select idx = idx + 1 Wend RegCloseKey hKey End Sub

结束啦,最好多练习,你懂得

转载于:https://my.oschina.net/bigfool007139/blog/397288

使用vb调用api注册表相关推荐

  1. 几行VB代码拿下注册表

    '****************************注册表操作函数********************** '声明:以下代码由轻风工作室REDICE编写,引用时请作一说明. '******* ...

  2. vb修改注册表!!调用WSH实现

    vb修改注册表!!调用WSH实现!!!!! [旭发飘扬 发表于 2007-3-5 下午 12:30:04]   在VB中,注册表的读写,可以用自身的SaveSetting.GetSetting函数,但 ...

  3. 用VB操作注册表 [转]

    用VB操作注册表(一) [转] 认识登录数据库(Registry) 我们在这里主要通过由Windows系统本身提供的注册表编辑器regedit.exe来认识登录数据库(Registry) 1.Key和 ...

  4. VB如何在Win10X64位系统上进行读写64位的注册表

    win10X64位系统注册表分两个部分:64位和32位,当我们用VB6生成的exe可执行的程序后,进行操作注册表时发现某些项无法写入和读取,这是因为VB6生成的程序是32位的,可见用32位的程序去读写 ...

  5. C/C++语言 Windows API更改文件、文件夹或注册表权限的所有者

    C/C++语言, 调用Windows API更改文件.文件夹或注册表权限的所有者 所用到的函数 GetUserName                 //获取当前登陆用户名 LookupAccoun ...

  6. 基于win注册表注册程序协议,你也能从网址调用程序带参。

    丨你所具备能力 本教程综合难度为:※(共10颗※) 您需要知道:Python语法基础.WEB开发基础.Qt库.win注册表编辑器. 如果您在学习的过程中,遇到困难,可以直接百度获取详细帮助,本文章不深 ...

  7. Excel催化剂开源第32波-VSTO开发的插件让WPS顺利调用的方法-注册表增加注册信息...

    VSTO插件开发完成后,鉴于现在WPS用户也不少,很多时候用户没办法用OFFICE软件,只能在WPS环境下办公,VSTO开发的插件,只需增加一句注册表信息,即可让WPS识别到并调用VSTO开发的功能, ...

  8. Windows 注册表相关API总结

    目录 一.注册表简介 几个根键的用途说明: 二.常用API介绍 1.RegCreateKeyEx() 创建注册表键 关于KEY_WOW64_32KEY/KEY_WOW64_64KEY几点说明 2.Re ...

  9. Graphql 初体验 第十一章 | #13 Hitting the API(实现了登录注册表单)

    对应内容:#13 Hitting the API | Build a Complete App with GraphQL, Node.js, MongoDB and React.js 主要内容: 完成 ...

最新文章

  1. 阿里云服务器 安全狗外部访问mysql_阿里云linux/centos服务器安全狗安装
  2. 【Python】Python中令人头疼的变量作用域问题,终于弄清楚了
  3. 列表推导式(Python)
  4. 蒙特卡洛分析_随机模拟:马尔科夫链蒙特卡洛采样MCMC与EM算法「2.3」
  5. 浏览器皮肤_和平精英返场皮肤投票时间是什么时候?投票地址入口介绍-手游资讯...
  6. 大数据(1)---大数据全系技术概览
  7. 编程语言对比 主程序传参
  8. 【翻译】在backtrack5上用Evilgrade工具15步**windows
  9. MVC之在实例中的应用
  10. 解决源码安装手册找不到问题
  11. C++预编译头文件 – stdafx.h
  12. 程序员能考哪些证书?这个几个不能少
  13. java软件工程师培训学_Java软件工程师学习路线
  14. python计算字节数_Python len()函数详解:获取字符串长度或字节数
  15. Linux——缺少ld-linux.so.2,lbiz.so.1库文件
  16. 中国十大徒步路线,你走过几个?
  17. web页面PC端和移动端的区别
  18. 计算机无法共享访问受限,设置组策略解决共享访问受限问题
  19. 《多媒体技术基础》辅导
  20. 【Pytorch】区分detach()和torch.no_grad()

热门文章

  1. Map对象转换为一个实体类对象
  2. 计算机考研2020时间,2020计算机考研复习要点:时间与空间复杂度
  3. LOL手游英雄联盟手游IOS注册下载
  4. 23种设计模式-抽象工厂模式《三国王者》
  5. 梅西离开巴萨,十大经典比赛必看
  6. MySQL备份Percona Xtrabackup安装和卸载
  7. K8s+dashboard安装部署
  8. 如何利用OCR技术快速提升汽车销售服务的运营效率
  9. 工作六年的主管对网投的建议
  10. MaAsLin2及R实现