MS-DOS方式下对注册表的编程

在MS-DOS方式下也能对注册表进行编程?是的。当您的Windows 95/98因注册表问题而无法启动到图形界面时,您此时只有在DOS下对注册表进行手术了。因为注册表编辑器Regedit.exe其实是一个双栖型的程序,既可在DOS下运行,也可在Windows 95/98下运行。许多用户可能已经知道在Windows下使用Regedit 的方法,那么,要掌握MS-DOS方式下对注册表的编程,首先要了解在DOS下如何使用注册表编辑器。

  在DOS提示符下键入Regedit命令,将出现一个帮助屏幕。此屏幕给出了其命令行参数及其使用方法。

  语法: Regedit [/L:system] [/R:user] filename1
     Regedit [/L:system] [/R:user] /C filename2
     Regedit [/L:system] [/R:user] /E filename3 [regpath]

  其中:

     /L:system 指定system.dat文件的存放位置。

     /L:user 指定user.dat文件的存放位置。

     filename1 指定引入注册表数据库的文件名。

     /C filename2 指定形成注册表数据库的文件名。

     /E filename3 指定导出注册表文件的文件名。

     regpath 指定导出注册表文件的开始关键字(缺省为全部关键字)

  现举几个例子说明regedit.exe在DOS下的使用方法。

    【例1】 将系统注册表数据库registry导出到reg1.reg文件中。

     regedit /E reg1.reg

    【例2】 reg1.reg形成系统注册表数据库registry(全部)中。

      regedit /C reg1.reg

    【例3】 将reg.dat引入系统注册表数据库中(部分)。

      regedit reg.dat

    【例4】 将CJH开始的关键字导出注册表数据库,并命名为cjh.reg。  

      regedit /E cjh.reg cjh

    【例5】 指定system/dat存放在D:/PWIN中和user.dat存放在E:/PWIN中,将reg.dat数据文件形成一个新的注册表数据库registry。

     regedit /L:D:/PWIN /R:E:/PWIN /C reg.dat

  有了以上这些知识,结合在《对注册表进行编程的“捷径”》里讲过的关于导入或导出的注册表文件(*.REG),我们就可以在DOS方式下对注册表进行编程了。

  我们还是以更改“*.txt”文件的默认打开方式——“记事本”为“写字板”为例。首先在MS-DOS提示符下导出“HKEY_CLASSES_ROOT/txtfile”子键这一分支,即执行命令:

     regedit /E txt.reg HKEY_CLASSES_ROOT/txtfile

  然后用DOS下的EDIT编辑器打开txt.reg文件进行编辑:将其中所有的“C://WINDOWS//NOTEPAD.EXE”全部改成“C://WINDOWS//WRITE.EXE”,存盘退出EDIT,再在命令行下执行命令:

     regedit txt.reg

  便大功告成了。

  当然,严格来说,这并不是编程。如果一定要编程实现的话,我们可以将以上过程写成一批处理文件chang.bat:

@echo off
path=c:/windows;c:/windows/command;c:/dos
cls
echo 正在导出注册表……
  regedit /E txt.reg HKEY_CLASSES_ROOT/txtfile
echo.
echo 注册表导出完毕!按任一键开始编辑注册表……
echo.
pause
edit txt.reg
echo 正在将修改后的注册表导入……
regedit txt.reg
echo 恭喜您!在MS-DOS方式下成功修改了注册表!
pause
cls
@echo on

  充分发挥EDIT编辑器的强大功能,我们可以在遵循导出的注册表文件的格式的前提下,对注册表进行随心所欲的修改、删除或者增加任一子键。如果觉得这还不够程序化,您可以发挥DOS环境下各种程序设计语言的优势,加上交互性的界面,将这一过程真正的程序化,应该丝毫不亚于Windows状态下的利用API函数做出来的效果。有兴趣的朋友可以试一试。如果对此还有什么问题,请与我联系(bacalpdc@sohu.com)。

    
对注册表进行编程的“捷径”
2001-09-29· ·--··yesky


  我们知道,在VB中,可以用 SHELL 函数来执行一个可执行文件。而对注册表的访问可以方便地用 Regedit.exe 命令将它与一文本文件联系进来。这样一来,我们无需掌握高深的API函数,需编程对该文本文件进行处理即可。

  首先,注册表中各个主键和子键的键值,一般来说有以下几种类型:

  ①REG_SZ(普通字符串)

  ②REG_EXPAND_SZ(可展开式字串)

  ③REG_BINARY(二进制)

  ④REG_DWORD(长整数型,即十六进制值)。

  他们在导出的注册表文件中的表示形式不尽相同。具体实例请参见后文。

  其次,让我们来熟悉一下Regedit命令的用法及有关参数:

   REGEDIT filename1

   REGEDIT /E filename3 [regpath1]

   REGEDIT /D regpath2

   filename1 指定将要输入到注册表中的文件。

   /E filename3 指定注册表的输出文件名。

   regpath1 指定将要输出的注册表的键名(缺省为输出整个注册表)

   /D regpath2 指定将要删除的注册表的键名

  其中导出或导入的文件为一文本文件。格式如下:(小括号内为注释,……表示此处有省略)

   REGEDIT4 (必须以此开头,注意大小写)

   [HKEY_LOCAL_MACHINE/Software](每个子键与上一子键之间必须空一行,且子键用[]括起来)
    
    @=""(@表示键值名为“默认”,键值为空串)
    …… ……

   [HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion]

    "InstallType"=hex:03,00 (表示键名为"InstallType",键值为REG_BINARY(即二进制)类型 03 00)
    "DevicePath"="C://WINDOWS//INF"
    (键"DevicePath"是普通字符串,即 REG_SZ 类型。当字符串中含有路径“/”等特殊字符时,约定
     用“//”代替“/”,用“/n”和“/"”来代替回车和 "字符)
    …… ……

   [HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Setup/SetupX/Cert]

    "RG2CATDB Return"=dword:00000000(dword:表示该键值REG_DWORD(长整数型,即十六进制值)

   [HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/MS-DOSOptions/Smartdrv]

    …… ……

   "Autoexec.Bat"="LoadHigh %WINDIR%//SmartDrv"(含有一对%的字符串是可展开式字串,即REG_EXPAND_SZ类型,此处%WINDIR%表示WINDOWS的工作目录)

  例如:可用以下代码将指定的子键路径[HKEY_LOCAL_MACHINE/Software]的默认值修改为字符串:“此处值已修改!”

stt = "HKEY_LOCAL_MACHINE"
a = Shell("regedit /e c:/windows/temp/temp.txt " & stt)
'导出要修改的注册表分支
If a = 0 Then
 MsgBox "导出错误!": End '可能是子键名称错误
 regpath = "[" + stt + "]"
 Open "c:/windows/temp/temp.txt" For Input As #1
 Open "c:/windows/temp/temp1.txt" For Output As #2
 regwrite = flase '是否是要修改的行
 Print #2, "REGEDIT4" '写入文件头,注意必须是大写
 Print #2, ""
 Do
  Line Input #1, aa$
  b$ = aa$
  If regwrite = True Then '说明此行是需要修改的行
   b$ = "@=""默认值已修改!"""
   Print #2, b$
   MsgBox "原来的值为:" & Mid$(aa$, 3) & "即将改为:" &
    Mid$(b$, 3), vbOKOnly, "注册表变化"
  End If
  If aa$ = regpath Then
   Print #2, b$
   regwrite = True
   '说明下一行为所要修改的行,以便下次循环时对b$进行修改
  Else
   regwrite = flase '不是要修改的行
  End If
  ' If Left(aa$, 2) <> "@=" And
      b$ = "@=""默认值已修改!""" Then
    Print #2, aa$
    '如果子键[HKEY_LOCAL_MACHINE/Software]中原来未设置默
     认值,此时相当于在文件#1处插入b$。
 Loop Until EOF(1)
 Close
 a = Shell("regedit c:/windows/temp/temp1.txt ")
  '将修改后的内容导入到注册表中
 If a = 0 Then MsgBox "修改失败!": End


  按以上思路,我们可以很方便快捷地对注册表进行增、删、改等操作,是不是很简单?

在DOS下使用注册表编辑器

注册表编辑器Regedit.exe其实是一个双栖型的程序,既可在DOS下运行,也可在Windows 98下运行。许多用户可能已经知道在Windows下使用Regedit 的方法,那么,在DOS下如何使用注册表编辑器呢?
在DOS提示符下键入Regedit命令,将出现一个帮助屏。此屏幕给出了其命令行参数及其使用方法。
语法:
Regedit [/L:system] [/R:user] filename1
Regedit [/L:system] [/R:user] /C filename2
Regedit [/L:system] [/R:user] /E filename3 [regpath]
其中:
/L:system 指定system.dat文件的存放位置。
/L:user 指定user.dat文件的存放位置。
filename1 指定引入注册表数据库的文件名。
/C filename2 指定形成注册表数据库的文件名。
/E filename3 指定导出注册表文件的文件名。
regpath 指定导出注册表文件的开始关键字(缺省为全部关键字)
现举几个例子说明regedit.exe在DOS下的使用方法。

【例1】 将系统注册表数据库registry导出到reg1.reg文件中。
regedit /E reg1.reg

【例2】 reg1.reg形成系统注册表数据库registry(全部)中。
regedit /C reg1.reg

【例3】 将reg.dat引入系统注册表数据库中(部分)。
regedit reg.dat

【例4】 将CGJ开始的关键字导出注册表数据库,并命名为cgj.reg。
regedit /E cgj.reg cgj

【例5】 指定system/dat存放在D:/PWIN中和user.dat存放在E:/PWIN中,将reg.dat数据文件形成一个新的注册表数据库registry。
regedit /L:/PWIN /R:E:/PWIN /C reg.dat

下面介绍当您在启动Windows时出现如图1所示的对话框时,使用RegEdit来恢复注册表的方法。
1.首先在安全模式下导出,然后再引入注册表文件
(1) 关闭计算机后,重新启动,在出现“Starting Windows98”时,按F8键,在启动菜单中选择“Safe mode command prompt only”,则系统进入安全模式。
(2) 执行如下命令:
regedit /l:c:/windows/system.dat /e c:/system.txt (导出注册表)
cd/windows (Windows98系统目录)
attrib -s -h -r system.dat(去掉SYSTEM.DAT的系统、隐含、只读属性)
ren system.dat system.old (将当前的SYSTEM.DAT文件改名)
regedit /l:c:/windows/system.dat /c c:/system.txt (引入注册表)
(3) 重新启动计算机,以正常方式启动Windows98系统,如果错误仍出现,可以在安全模式下使用如下命令:
regedit /l:c:/windows/user.dat /e c:/user.txt (导出注册表)
cd/windows
attrib -s -h -r user.dat(去掉USER.DAT的系统、隐含、只读属性)
ren user.dat user.old (将当前的USER.DAT文件改名)
regedit /l:c:/windows/user.dat /c c:/user.txt (引入注册表)
2.重新启动计算机,以正常方式启动Windows98系统,如果错误仍出现,可以恢复系统至最后一次成功运行时的注册表。
(1) 关闭计算机后,重新启动,进入安全模式。
(2) 执行如下的命令:
cd/windows
attrib -s -h -r system.dat
ren system.dat system.bad
(3) 重新启动Windows98系统,在启动时,系统如果没有发现system.dat文件,就会使用System.da0文件,系统会自动将System.da0文件改名为system.dat。
3.如果仍有启动错误出现,则恢复系统至第一次成功运行时的注册表。
(1)在关闭计算机后,重新启动,进入安全模式。
(2) 执行如下命令:
cd/windows
attrib -s -h -r system.dat
ren system.dat system.xxx
cd attrib -s -h -r system.1st (此文件在启动盘的根目录下,通常在C:/)
copy system.lst c:/windows/system.dat(使用system.lst替代system.dat)
attrib +s +h +r system.lst (加上属性)
4.重新启动Windows98系统,如果仍有错误发生,再重新安装Windows98系统。

在DOS下使用ScanReg

在DOS下执行ScanReg/?命令,则出现一个帮助信息屏。该屏幕将给出ScanReg的使用方法:
ScanReg /[Option]
其中Option可为?(获取帮助信息)、BACKUP(备份注册表)、RESTORE(恢复注册表)、FIX(修复注册表)、COMMENT(将说明信息加入到备份注册表文件.CAB中)。
例如:
1.在DOS下执行ScanReg /BACKUP,则将注册表备份到.CAB文件中。
2.执行ScanReg /FIX,则修复注册表中的错误。
3.执行ScanReg /RESTORE,则将注册表恢复过来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值