文件名称:
VB6在64位的Windows7环境下对注册表的操作之Shell篇
开发工具:
文件大小: 185.69kb
下载次数: 1
上传时间: 2019-09-02
详细说明:VB6编写的程序是32位软件,在64位Windows系统下处理注册表时,被系统重定位,导致无法正确处理注册表。本文采用Shell方法操作注册表,自动判断操作系统位数,正确操作注册表。采用Shell方法,比传统的API方法处理注册表,更简单,更高效,推荐选用。VB6
在64位的 Windows7坏境下对注册表的操作之 Shell篇
执行外壳-Shel1(外壳,0)
等待外壳结束
等等=1
等等<0
等等=0 repRocess( PROCESS ALL ACCESS,1,执行外壳)
DoEvents'这个不加会卡死程序具体是什么我也不清楚耶
CloseHandle等等’没这个等等永远不会为0也就无法判断命令结束了
Wend
等待外壳结束
项名=原始项名回归原始
键名一原始键名’回归原始
键值=原始键值’回归原始
End Function
Public Function操作系统位数O
al1lsow6 Process(ietCurrentProcess., ngReturn)’判新系统位数
If IngReturn=0Then
Msgbox"非64位
MsgB0x"系统是64位
操作系统位数=64
End If
操作系统位数-1 ngReturn
End Function
Function删除项注册表项(项名,键名,参数)
作用:删除注册表中的某项,或某键。项名,键名,参数都是字符串儿变量
使用方法
删除某键,必须指定键名。只要指定键名,参数是什么都是无效的
删除项日,必须指定键名为空,而且必须指定参数,参数是个哥汉字:
参数="默认值”只删除该项的默认值
参数="所有键”删除该项下的所有键名,包括默认值
参数-"所有项"’删除该项以及该项下面所有的子项、键名,也就是删的啥也不剩”
If项名-"Then
MsgBox"怎么跟养生堂毕业的微信老娘们儿一样?顾头不顾
Exit Function
End If
原始项名=项名
原始键名=键名
f Instr(项名,"")<>0Then’带空格的项名处理
项名=Chr(34)&项名&Chr(34)
If InStr(键名,"")<>0Then’带空格的项名处理
键名=Chr(34)&键名&Chr(34)
End If
If键名(>"Then
外壳-"cmd/ c reg delete"k项名&”/"&键名&"/f
Else
第3页共14页
VB6在64位的 Windows7坏境卜对注册表的操作之 Shell篇
Select Case参数
case"默认值”’只删除该项下的默认值
外壳
delete"&项名&"/ve/f
case"所有键”’删除该项下的所有键名,包括默认值
外壳="cmd/ c reg delete"&项名&"/va/f
case"所有项”’删除该项以及该项下面所有的子项、键名,也就是删的哈也不剩
外壳="cmd/ reg delete"&项名&"/f
Case Else
MsgBox"参数不正确。不给马儿草,还想马儿跑,哦,原来是老板来了,快请坐
Exit Function
End Select
End If
f撅作系统位数-64Then'64位系统的话
外壳=外壳&"/reg:64
End If
执行外完=Shel1(外壳,0)
等待外壳结束
等等=1
While等等<0
等等=0 preProcess(( PROCESS ALL ACCESS,1,执行外壳)
DoEvents’这个不加会卡死程序具体是什么我也不清楚耶
Closehandle等等没这个等等水远不会为0也就无法判断命令结束了
等待外壳结束
End Function
Function读取注册表键值(项名,键名,类型)
读取的键值都是字符串儿。
你在调用时,用下一行语句所示的方法,将 REG DWORD类型的字符串转换成数值
xX=Val("&H"&键值)’因为读出来的是16进制字符串儿,所以添加B的&H十六进制引导符,注意不是0x引导16进制
Clipboard. Clcar'洁除剪贴板中的内容
原始项名=项名
原始键名=键名
If Instr(项名,"")<>0Then’带空格的项名处理
项名=Chr(34)&项名&Chr(34)
End If
If InStr(键名
〉0Then’带空格的项名处理
键名=Chr(34)&键名&Chr(34)
End If
外壳="cmd/ c reg query"&项名&"/"&键名
If操作系统位数=64Then64位系统的话
壳-外壳&"/reg:64
End If
第4页共14页
VB6在64位的 Windows7坏境卜对注册表的操作之 Shell篇
外壳-外壳&"clip"复制到剪贴板
执行外壳=She11(外壳,0
等待外壳结束
等等
hile等等<>0
等等-0 inpRocess(( PROCESS ALL ACCESS.1,执行外壳)
DoEvents'这个不加会卡死程序具体是什么我也不清楚耶
CloseHandle等等'没这个等等水远不会为0也就无法判断命令结束了
Wend
等待外壳结束一
qq= Clipboard. ntext’读取剪贴板
Dim a( As String
a= Split(g, vbCrlf)’一共有多少行。第一行为空,第一行是项名,第三行开始的才是所需内容,最后一行还是空行。
For i=2 To UDound (a)
If Trim(a(i))
Then exit for
Z+ Trim(a(i))& Chr(10)
Next i
去掉返回结果中的键名
w- InStr(z,原始键名)如果键名带空格,执行前需带上引号。返回z中不带引号
If ww>-1 Then
去掉键名=Trim( Right(z,Lean(2)-Len(键名)
End If
MsgBox"去掉了键名之后:"&Chr(10)&去掉键名
Instr(去掉键名
f ww>1 Th
类型- Trim ( Left(去掉键名,ww))
End If
MsgBox"类型:"&Chr(10)&类型
w=nstr(去掉键名,””)
fww>=⊥Then
键值=Trim( Right(去掉键名,em(去掉键名)-w)
EndIt
If Right(键值,2)=Ch(10)&Chr(10)Then键值=Left(键值,Len(键值)-2)键值尾部换行处哩
If Right(键值,1)=Chr(10)Then键值=Let(键值,Len(键值)-1)
1f类型-" REG DWORD" And Left(键值,2)-“0 x" Then’去掉带有C+味道的0x引导16进制数标识
键值- Right(键值,Len(键值)-2)
第5页共14页
VB6在64位的 Windows7环境卜对注册表的操作之She11篇
End If
读取注册表键值=键值
项名=原始项名’回归原始
键名=原始键名’回归原始
Clipboard.Cear'清除剪贴板中的内容
End Function
Public Sub读取汁册表多个键值(项名)
这个子稈序读取汁册表中某子项下面的键名、类型和键值
稍微修改一下,也可以获得子项名称,这里没有给出
返回值在个全局数组变量中,之所以不使用函数数组变量,是为了简洁方便。
多键名返回(j)全局变量,子项下的键名
多类型返回(jj)全局变量,子项下的键名的类型
多键值返回(j)全局变量,子项卜的键名的键值
所有的返回值都是字符牛儿,类型是 REG Dword记得将16进制字符中转换为数值
Clipboard.Cear'清除剪贴板中的内容
原始项名=项名
If InStr(项名,“")<0Then’带空格的项名处理
项名=Chr(34)&项名&Chr(34)
End If
外壳="cnd/ c reg query"&项名&"/z
If操作系统位数=64Then64位系统的话
外壳=外壳&"/reg:64
End If
外壳一外壳&”|c1ip"复制到剪贴板
执行外壳=She11(外壳,0)
等待外壳结束
While等等<>0
等等=( reprocess( CESs A. ACCESS,1,执行外壳)
DoEvents这个不加会卡死程序具体是什么我也不清楚耶
CLosellandle等等’没这个等等永远不会为0也就无法判断命令结束了
等待外壳结束
qq= Clipboard. GetText’读取剪贴板
im a() As String
a- Split(qg,bcrf)计算剪贴板中有多少行。第一行为空,第二行是项名,第三行开始的才是所需内容,最后一行还是空行
第6页共14页
VB6
在64位的 Windows7坏境下对注册表的操作之 Shell篇
返回行数- UBound(a)
键名个数= UBound(a)-2因为第1、2行和最后一行没用,而且打算下面数组从1开始,数组0空着
ReDim多键名返回(键名个数),多类型返回(键名个数),多键值返回(键名个数)’重新定义数组变量个数并清除变量值
0To键名个数’因为是全局变量,使用前清空,尽管上一句已经清空了,重做一下。不喜欢可以删除j循环
多键名返回(j-”全局变量
多类型返回(j)-”全局变量
多键值返回(j
全局变量
kkk=1
ori=21 o UBound(a)’第一行是读取的项名,第二行才是读取的内容,最后一行是空的。 UBound(a)是数组交量最大维数
If Trim(a(i))= Then Exit For
If Instr(rim(a(i),Chr()>0 Then trim(a(i)=left(lrim(a(1)), Instr(rim(a(i),Chr(0)-1)’去掉本行后面的空字
符
处理串儿=Trim(a(i)
分隔转换处理处理串儿,返回1,返回2,返回3
If Left(返回2,4)<"REG" Then Exit For’读取的不是键,而是子项,就退出循环
多键名返回(kk)-返回1
多类型返回(k)-返回2
多键值返回(k)=返回3
kkk=kkk+
Next i
多键值返回数量=(kk-1)
eDim Preserve多键名返回(多键值返回数量),多类型返回(多键值返回数量),多键值返回(多键值返回数量)重新定义返回个数
lapboard.cear'清除剪贴板中的内容
End Sub
Sb分隔转换处理(处理串儿,返回1,返回2,返回3)
尾部测试="尾部测试"&Chr(10)&Chr(10)
w= Instr(处理串儿,"REG")
If ww>=1 Then
返回1=Tim(eft(处串儿,w-1)&尾部测试键名
End If
处理串儿1= Right(处里串儿,Len(处理串儿)-ww+1)
w- InStr(处理串儿1,"(1)")
第7页共14页
VB6
在64位的 Windows7坏境下对注册表的操作之 Shell篇
If ww>-1Then
返回2=Trim(Left(处理串儿1,w-1)&尾部测试’类型
End If
返回3=Trim( Right(处理串儿1,Len(处理串儿1)-w-2)
If返回2=" REG DWORD” And left(返回3,2)="0x"Then'去掉0x引导16进制数标识
返回3-Righ(返回3,Len(返回3)-2)8尾部测试’类型
End Sub
窗体部分,直接将下表中绿色的代码复制刭记事本,保存为“注册表读写例程窗体.frm”
注册表读写例程窗体frm
VERSION 5.00
Begin VE.Form示例窗体
Caption=Forml
ClientHeight=12090
ClientLeft= 60
ClientTop=345
ClientWidth=14895
LinkTopic="Forml
ScaleHeight- 12090
ScaleWidth-14895
StartUpPosition=3'窗口缺省
Begin VB TextBox Text1
Height-3855
Left-480
MultiLine =-l'True
TabIndex=8
ext="注册表读写例程窗体frx:000
Top=2880
Width=11175
Begin VB. CommandBut ton CommandS
aption="读取多个键值示例
Height =375
Left=360
TabIndex 7
Top=1200
Width=1815
Begin VB. CommandBut ton Command
Caption-"退出
leight-375
Left-3000
TabIndex-6
Top=1440
idth= 735
End
第8页共14页
VB6在64位的 Windows7环境卜对注册表的操作之She11篇
Begin VB. ComnandBut ton Commands
Caption-"删除项下所有键值
Height =375
Left= 4560
TabIndex=5
Top=1320
Width= 1695
End
Begin VB CommandButton Command1
Caption-"删除项的默认值
Hoight-375
Left-4560
TabIndex=4
840
Width=1695
End
Begin vB. CommandBut ton Command:
aption="删除键名
Height=375
Left= 4560
Tab lndex= 3
360
Width=1215
Begin VB. CommandBut ton Commands
Caption="删除项目
Height=375
LTT
4560
1800
idth= 1695
Begin Vb.CommaNdbutton coMmand2
Caption="设置键值示例
Height=375
Left=2610
TabIndex=1
Width- 1335
Begin VB CommandButton Command1
Caption-"读取一个键值示例
Height =375
Left=360
Tab Index=0
op
idth =1815
Attribute Name="示例窗体
Attribute VB GlobalName Space= False
Attribute VB Creatable= False
Attribute VB PredeclaredId=T
Attribute VB Exposed= False
Sub读取键值示例()
获取系统安装时间。VB采用传统的注册表读取例程是无法在64位系统上正确执行的
第9页共14页
VB6在64位的 Windows7坏境卜对注册表的操作之 Shell篇
但是老汉我的例程是可以的。
I="HKEY LOCAL MACHINE \SOFTWARE \Microsoft\Windows NT\CurrentVersion
键名=" InstallDate"'系统安装的时间戳子
键值=读取注册表键值(项名,键名,类型)
MsgBox"读取【”&项名&"】下的键值:"&Chr(10)&键名&"=”&键值&Chr(10)&类型=”&类型
x-"aH"&键值'因为读出来的是16进制字符串儿,所以添加VB的&H十六进制引导符
Dim yy As Long'需要长整型数才可以
nix时间戳子=Val(xx)’十六进制字符串儿转换为数值
zz= Dateado("s",Unix时间戳子,#//1970#)’将Lnix时间戳子,转换成北京时间
系统安装时间= Format(z,"yy年m月d日h:m:s")
MsgBox“您的系统安装时间是:"&Chr(10)&Chr(10)8系统安装时间
End Sub
sub设置注朋表键值示例(
项名,键名,类型,键值都是字符串儿变量
键名如果为空的话,只创建项名
类型取值如下
REG SZ字符串儿
REG DWORD’数值,32为
REG BINARY’二进制
REG MULTI S2’多字符串儿
REG EXPAND SZ字符串儿扩展
REG QWORD’数值,64位
EG NONE
不用担心注册表是否存在【项名】,执行完了之后他会自动创建
项名-" HKEY LOCAL MACHINE\ SOFTWARE\test测试
键名-"谁呀
类型=" REG SZ
健值=“养生堂毕业的微信老娘们儿”
a=设置注册表键值(项名,键名,类型,键值)
MsgBox“您的个人信息已保存作胜利完成!“&Chr(10)k“从此之后,您就是e贵的”&键值
End Sub
b则除注朋表键值示例O
作用:删除注表中的某键。项名,键名,参数都是字符串儿变量
使用方法
若册除某键,必须指定键名。只要指定键名,参数是么都是无效的。如果没有这个键名,哈也不操作
若除项目,必须指定键名为空,而且必须指定参数,参数是三个汉字:
参数-"默认值”只删除该项的默认值
第10页共14页
(系统自动生成,下载前可以参看下载内容)
下载文件列表
压缩包 : 925d83f9f6ef613842541265a23ce029.pdf 列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.