ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 高效办公必会的Office实战技巧 免费下载Excel行业应用视频
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 7857|回复: 11

如何把REG_BINARY类型的值写入注册表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-7-5 12:27 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:注册表

如何把REG_BINARY类型的值写入注册表?

值比较长,如02 ff 03 04 06 47 36 …… 有20多位,想以REG_BINARY类型写入注册表,怎么写?

TA的精华主题

TA的得分主题

发表于 2006-7-5 12:49 | 显示全部楼层

参看:

SaveSetting 语句

      

在 Windows 注册表中 或 (Macintosh中)应用程序初始化文件中的信息保存或建立应用程序项目。

语法

SaveSetting appname, section, key, setting

SaveSetting 语句的语法具有下列命名参数

部分描述
appname必要。字符串表达式,包含应用程序或工程的名称,对这些应用程序或工程使用设置 在Macintosh中,这是System文件夹中Preferences文件夹中初始化文件的文件名。
section必要。字符串表达式,包含区域名称,在该区域保存注册表项设置。
key必要。字符串表达式,包含将要保存的注册表项设置的名称。
setting必要。表达式,包含 key 的设置值。

说明

如果无论如何也不能保存注册表项设置,则将导致错误发生。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-5 18:42 | 显示全部楼层
谢谢,不过楼上的方法好象只能在HKCU\Software\VB and VBA Program Settings\主键下添加、修改、删除,而且添加的键值都是REG_SZ类型的,
如何在其他主键下添加REG_BINARY类型的数据(关键是比较长),还请多多指教。

TA的精华主题

TA的得分主题

发表于 2006-7-5 21:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-7-5 21:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-7-5 21:25 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-6 12:51 | 显示全部楼层

谢谢楼上几位,用wsh和api都能写注册表,但写入比较长的REG_BINARY类型的数据,我还是不知道怎么写,请多多指教。

TA的精华主题

TA的得分主题

发表于 2006-7-6 18:20 | 显示全部楼层

下面是一个写注册表的函授,要自己加上注册表API的声明. 看看可不可以.

Public lmainKey As Long
Public Enum w32ValueType
        w32BINARY = REG_BINARY
        w32DWORD = REG_DWORD
        w32REGSz = REG_SZ
End Enum
Sub mmm()
    Dim strSubKeyName As String
    Dim strValueName As String
    Dim bBuff(3) As Byte
    Dim iDataType As Integer
   
    strSubKeyName = "Control Panel\desktop"
    strValueName = "UserPreferences1"
    bBuff(0) = &H20
    bBuff(1) = &H21
    bBuff(2) = &H22
    bBuff(3) = &H24
    lmainKey = HKEY_CURRENT_USER
    iDataType = w32BINARY
    If SetValue(strSubKeyName, strValueName, iDataType, bBuff) = True Then
        MsgBox "Successed Set Value"
    Else
        MsgBox "failed to Set Value"
    End If
End Sub
Public Function SetValue(ByVal sTemp As String, ByVal sTemp1 As String, _
  ByVal sTemp2 As Integer, sTemp3 As Variant) As Boolean
  Dim Handle As Long, lngValue As Long
  Dim strvalue As String
  Dim binValue() As Byte, length As Long, lresult As Long
 
  SetValue = False
  ' Open the key, exit if not found.
  If RegOpenKeyEx(lmainKey, sTemp, 0, KEY_WRITE, Handle) Then
    Exit Function
  End If
 
  Select Case sTemp2
    Case REG_DWORD
      lngValue = sTemp3
      lresult = RegSetValueEx(Handle, sTemp1, 0, sTemp2, lngValue, 4)
    Case REG_SZ
      strvalue = sTemp3
      lresult = RegSetValueEx(Handle, sTemp1, 0, sTemp2, ByVal strvalue, Len(strvalue))
    Case REG_BINARY
      binValue = sTemp3
      length = UBound(binValue) - LBound(binValue) + 1
      lresult = RegSetValueEx(Handle, sTemp1, 0, sTemp2, binValue(LBound(binValue)), length)
  End Select
 
  If lresult = 0 Then
    SetValue = True
End If
  ' Close the key.
  RegCloseKey Handle
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-7 20:39 | 显示全部楼层

实在太谢谢winland了,代码可以用。

多问一句,用wsh能写入比较长的REG_BINARY类型的数据吗?

TA的精华主题

TA的得分主题

发表于 2006-7-7 23:40 | 显示全部楼层
大名鼎鼎的WSH听说过吗? 它就是Windows Script Host的缩写形式,WSH是Windows平台的脚本指令,它的功能十分强大,并且它还是利用语法结构简单、易学易用且功能强大的JScript和VBScript脚本语言,来实现其卓越的功能的,除了本文介绍的修改注册表之外,它还可以访问Excel文件,也能与网络沟通,当然它最大的优势莫过于它能与操作系统沟通,而修改注册表只是它与操作系统沟通的冰山一角。正是它有如此诸多的优点与实用性,正倍受很多Windows用户的青睐,本文就为大家介绍一二,让各位领略一下WSH的风采。
用VBScript编写的WSH程序文件的扩展名为.vbs,该脚本程序在窗口界面是由wscript.exe文件解释执行的,在字符界面是由cscript.exe文件解释执行的,命令格式为:cscript filename.vbs
 
创建对象
用VBScript修改注册表,必须先创建一个能于操作系统沟通的对象,再利用该对象的各种方法对注册表进行操作,创建这个对象的方法和格式如下:
Dim OperationRegistry
Set OperationRegistry=WScript.CreateObject("WScript.Shell")
上述这些代码就创建了一个能与操作系统沟通的对象OperationRegistry
 
对象的方法
有了以上这个对象,并不等于就能马上对注册表进行操作,我们还必须弄清该对象对注册表进行操作的几种重要方法.
1.对注册表的读操作RegRead
2.对注册表的写操作RegWrite
3.对注册表的删操作RegDelete
补充一点,WSH还有两个通用的方法:
WScript.Echo()用来显示一串文本信息,相当于VB中的MsgBox()。
Wscript.Quit()用来退出VBScript程序。
 
方法的参数
对于以上三种操作RegRead,RegWrite,RegDelete都需要带参数进行,并且这些操作的参数的个数和形式又不尽相同,下面我就把它们的一个共同且必不可少的参数讲一下:
该参数可称作是"路径参数",它包括根键,主键路径和键值,各部分表示的方法如下:
根键:
根键有两种表示方法。
方法一:直接用它在注册表中的字符串来表示,如:
HKEY_CLASSES_ROOT,HKEY_CURRENT_USER等
方法二:用缩写的四个字母来表示,前两个为HK,后两个即为根键单词的首字母。如:
根键HKEY_CLASSES_ROOT表示为:HKCR, 根键HKEY_CURRENT_USER可表示为:HKCU等。
主键路径:
主键路径就是目标键在注册表中的主键位置,各个主键之间用"\"符分隔开。如:"Software\Microsoft\Windows\CurrentVersion\Policies\"
键值:
键值参数直接接在主键路径之后。例如一个完整的路径如下所示:
"HKCR\Software\Microsoft\Windows\CurrentVersion\Policies\NoRun"
 
方法详解
1、RegRead操作详解
读操作RegRead主要是用来读取注册表中主键的默认值或键值的数据,我们可以将读得的数据送到相应的变量中,再利用VB中的MsgBox()函数将该数据显示出来,这就达到了读取注册表中数据的目的(也可以利用对象OperationRegistry的方法Popup()将读取的数据送至屏幕), 例如:
'read.vbs(将以下代码存为read.vbs文件)
Dim OperationRegistry
Set OperationRegistry=WScript.CreateObject("WScript.Shell")
Dim Read_Data1,Read_Data2
Read_Data1=OperationRegistry.RegRead("HKCR\.xxf\")
'读取根键HKEY_CLASSES_ROOT之下的.xxf主键的默认值,并将该数据送至变量Read_Data1
Read_Data2=OperationRegistry.RegRead("HKCR\.xxf\value")
'读取.xxf主键之下的value键值的数据,并将该数据送至变量Read_Data2
MsgBox("Default="&Read_Data1&" value="&Read_Data2)
'将读取的数据显示出来
2、RegWrite操作详解
写操作RegWrite主要是用来在注册表中新建主键或键值,并要赋予给它们一个初始值,该操作同样可以对注册表中以存在的主键或键值进行数据的修改,因此写操作的参数结构就比读操作要复杂一些,它不仅要路径参数,还要一个初始值和类型参数.
先来看初始值参数,该参数对于写操作来说是必不可少的,它可以为空(null)但却不能省掉。在新建主键时,初始值参数就赋给了该主键的默认值,在新建键值时,初始值参数就成了新建键值的初始数据.而初始值的类型,则是由类型参数决定的.类型主要有以下三种:
(1)REG_SZ:字符型.该类型为缺省类型
(2)REG_DWORD:双字节型.
(3)REG_BINARY:二进制型.
以上三种类型第1种和第2种用得最多,第3种类型在某些场合可以用第2种加以替代,这三种类型的赋值方法如下:
对于REG_SZ型:直接用字符串赋予,如"text","string"等
对于REG_DWORD型和REG_BINARY型则有两种赋值方式
i)直接用十进制的数表示,如:0,1等.
ii)用十六进制的数表示,如:0x12,0xff等. 看例:
'write.vbs
Dim OperationRegistry
Set OperationRegistry=WScript.CreateObject("WScript.Shell")
Default=OperationRegistry.RegRead("HKCR\")
'获取一个空值 (null)
 
OperationRegistry.RegWrite "HKCR\.xxf\",Default
'在根键HKEY_CLASSES_ROOT之下新建主键.xxf,并置其默认值为空
 
OperationRegistry.RegWrite "HKCR\.xxf\","xxffile"
'在根键HKEY_CLASSES_ROOT之下新建主键.xxf,并置其默认值为"xxffile"
 
OperationRegistry.RegWrite "HKCR\.xxf\value1","string"
'在主键.xxf之下新建一个字符串型键值value1,并置其初始值为"string"
 
OperationRegistry.RegWrite "HKCR\.xxf\value2",1,"REG_DWORD"
'在主键.xxf之下新建一个REG_DWORD型键值value2,并置其初始值为1
 
OperationRegistry.RegWrite "HKCR\.xxf\value3",0Xff,"REG_BINARY"
'在主键.xxf之下新建一个二进制型键值value3,并置其初始值为十六进制的ff
 
3、RegDelete操作详解
删除操作RegDelete主要是用来删除注册表中已存在的主键或键值,该操作是一种极其危险的操作,它能将主键或键值毫不留情的在注册表中“砍掉”,无论该键值下面有多重要的数据,它都能畅行无阻,因此在使用该操作时务必小心。
删除操作的参数形式与读操作的参数形式几乎完全相同,只是有一点小小的区别,那就是删除操作不需要将操作的返回值送给某一变量,例如:
'delete.vbs
Dim OperationRegistry
Set OperationRegistry=WScript.CreateObject("WScript.Shell")
OperationRegistry.RegRead("HKCR\.xxf\value")
'删除.xxf主键之下的value键值
OperationRegistry.RegRead("HKCR\.xxf\")
'删除根键HKEY_CLASSES_ROOT之下的.xxf主键
强调一点,不要更改注册表中已存在的主键或键值,更不要将它们删除,因为对注册表进行了不当的写操作或删操作,情况严重的会导致系统崩溃!如果你真想这么做,那就请你作好注册表的备份。
 
应用实例
1、读本机“计算机名”
'ReadComputerName.vbs
Dim ReadComputerName
Set ReadComputerName=WScript.CreateObject("WScript.Shell")
Dim ComputerName,RegPath
RegPath="HKLM\System\CurrentControlSet\Control\ComputerName\ComputerName\ComputerName"
ComputerName=ReadComputerName.RegRead(RegPath)
MsgBox("计算机名为"&ComputerName)
2、隐藏快捷方式图标上的小箭头
'Hidden.vbs
Dim HiddenArrowIcon
Set HiddenArrowIcon=WScript.CreateObject("WScript.Shell")
Dim RegPath1,RegPath2
RegPath1="HKCR\lnkfile\IsShortCut"
RegPath2="HKCR\piffile\IsShortCut"
HiddenArrowIcon.RegDelete(RegPath1)
HiddenArrowIcon.RegDelete(RegPath2)
3、改造“开始”菜单
'ChangeStartMenu.vbs
Dim ChangeStartMenu
Set ChangeStartMenu=WScript.CreateObject("WScript.Shell")
RegPath="HKCR\Software\Microsoft\Windows\CurrentVersion\Policies\"
Type_Name="REG_DWORD"
Key_Data=1
 
StartMenu_Run="NoRun"
StartMenu_Find="NoFind"
StartMenu_Close="NoClose"
 
Sub Change(Argument)
ChangeStartMenu.RegWrite RegPath&Argument,Key_Data,Type_Name
MsgBox("Success!")
End Sub
 
Call Change(StartMenu_Run) '禁用“开始”菜单中的“运行”功能
Call Change(StartMenu_Find) '禁用“开始”菜单中的“查找”功能
Call Change(StartMenu_Close) '禁用“开始”菜单中的“关闭系统”功能
4、向Windows中添加自启动程序
该程序能在开机时自动运行。
'AddAutoRunProgram.vbs
'假设该程序在c:\myfile文件夹中,文件名为autorun.exe
Dim AutoRunProgram
Set AutoRunProgram=WScript.CreateObject("WScript.Shell")
RegPath="HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"
Type_Name="REG_SZ"
Key_Name="AutoRun"
Key_Data="C:\Myfile\autorun.exe"
'该自启动程序的全路径文件名
AutoRunProgram.Write RegPath&Key_Name,Key_Data,Type_Name
'在启动组中添加自启动程序autorun.exe
MsgBox("Success!")

评分

参与人数 1鲜花 +2 收起 理由
YZC51 + 2 太强大了

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

关注官方微信,高效办公专列,每天发车

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2019-8-26 03:57 , Processed in 0.114561 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表