Vbscript写注册表的方法

分类:程序
早些年用过DOS系统的用户都知道,MS-DOS操作系统允许普通用户编写批处理文件来实现简单的编程。它有效地简化了我们的工作,带给我们许多方便。当时甚至出现了一些专门编写批处理文件的程序员呢。

  事实上,操作系统除了提供易于操作的使用界面外,还应当有一套内建的Script(脚本)语言才算完整。从某种角度来说,批处理文件可以说就是MS-DOS下的脚本语言。到了Windows时代,虽然Windows系统仍然保留了批处理,但是批处理在Windows中就显得功能过于简单,无法满足用户的需要了——比如修改注册表,批处理能做得到吗?事实上, Windows 98之后的Windows系统,除了保留原来的批处理系统之外,开始加入了对脚本语言的支持,这就是“Windows Scripting Host”,中文译名为“Windows 脚本宿主”,简称WSH。

  WSH本身并不是脚本语言,它是脚本语言的运行环境,WSH支持的脚本语言有JScript(微软版的JavaScript,与真正JavaScript不太一样)和VBScript——这个东东大家一定很熟悉啦,网页上常用。

  WSH的脚本引擎(Scripting Engine)有两种方式,一种是Command方式的CScript.exe,另一种是Windows方式的WScript.exe。我们编写的脚本程序(扩展名为“.js”和“.vbs”的纯文本文件)必须通过这两者之一来加载运行。

  虽然WSH支持JScript和VBScript语言,但仍然要配合WSH本身所提供的一些对象,以及对象的属性(Properties)和方法(Method)才能够发挥最大的效用。关于JScript和VBScript的程序设计我们这里就不多说了。我们现在还是把注意力放在WSH的对象上面。事实上,本文涉及的注册表编程就几乎不需要关于VBScript的任何知识,我们只需简单地套用现成的语句就可以了。

  WSH中的对象主要有:WScirpt、WshArguments、WshShell、 WshUrlShortcut、WshNetwork、    WshSpecialFolders、WshCollection、 WshEnvironment、WshShort等。

  每一个对象又都有各自的属性和方法。在这里我们仅就访问注册表所涉及的有关对象的方法和属性略做介绍。

  首先是WshShell对象。该对象可用来设置系统环境变量以及修改注册表的数据。要修改注册表的数据,需要使用WshShell对象的三种方法: RegDelete(删除注册表数据)、RegWrite(写入或新建注册表数据)和 RegRead(读取注册表数据)。

  通常我们只需要用到前两种方法,它们具体的使用方法如下:

  一、RegWrite(写入或新建注册表数据)

  * 新建子主键

  语法为:WshShell.RegWrite "子主键名"

  例如,我们想新建一个子主键“HKEY_CURRENT_USERMyReg”,可使用如下的语句:

  WshShell.RegWrite "HKCUMyReg"

  说明:子主键名必须以反斜线 () 结束,若不小心忘记输入了这个(),则该方法返回的是键值,即表示你是想在  HKEY_CURRENT_USER下建立了一个名叫MyReg的键值了。这一点一定要十分注意!

  注意引号里子主键的开头必须是下列根键名之一:

  HKEY_CURRENT_USER(可简写为HKCU)、HKEY_LOCAL_MACHINE (HKLM)、HKEY_CLASSES_ROOT(HKCR)、  HKEY_USERS和HKEY_CURRENT_CONFIG 
  * 在子主键下建立新的键值(或改写已有的键值的数据)

  语法为:WshShell.RegWrite "子主键名键值名","键值的数据","键值的类型"

  例如我们想在子主键“HKEY_CURRENT_USERMyReg” 下新建一个字符串键值KeyValue,设置键值的数据为“str”,可使用如下的语句:

  WshShell.RegWrite "HKCUMyRegKeyValue", "str"

  (注:键值为字符串值,可省去"键值类型"的声明)

  若所建的为二进制值或DWORD值,数据为“1”,则还必须声明键值的类型,如下:

  WshShell.RegWrite "HKCUMyRegKeyValue",1,"REG_BINARY"

  WshShell.RegWrite "HKCUMyRegKeyValue",1,"REG_DWORD"

  注意二进制值和DWORD值的数据不能加引号,而字符串值的数据则必须加引号。

  二、RegDelete(删除注册表数据)

  * 删除一个子主键

  语法为:WshShell.RegDelete "子主键名"

  例如,我们想删除子主键“HKEY_CURRENT_USERMyReg”,可使用如下的语句:

  WshShell.RegDelete "HKCUMyReg"

  * 删除子主键的某个键值

  语法为:WshShell.RegDelete "子主键名键值名"

  例如,我们想删除子主键“HKEY_CURRENT_USERMyReg” 的键值KeyValue,可使用如下的语句:

  WshShell.RegDelete "HKCUMyRegKeyValue"

  类似于RegWrite,有一个“”号表示的是删除子主键,没有“”则表示要删除的是子主键下的键值。 
除了WshShell对象外,我们还必须了解一下WScirpt 对象。WScirpt对象即代表Scripting Engine,只要启动Engine就会自动产生此对象。WScript对象提供了创建和读取对象的方法。要使用WSH的其他对象(例如WshShell对象),就必须先用WScript对象的有关方法(CreateObject、GetObject)来创建和读取。

  创建对象的语法如下:

  WScript.CreateObject(strProgID)

  其中strProgID就是我们所要创建的对象的标识名。

  例如:我们要使用WshShell对象及其属性和方法,首先就要用WScript对象的方法CreateObject来创建一个WshShell对象,语句如下:

  Set WSHShell = WScript.CreateObject("WScript.Shell")

  举一个例子吧。大家都知道,如果你使用了“开始”菜单中的“运行”,Windows将在列表框里记录下你“作案” 的痕迹。其实这些数据是记录在注册表中HKEY_CURRENT_USERSoftwareMicrosoftWindows

  CurrentVersionExplorerRunMRU子键下,我们只要把这个子键删除,然后再重新建立,不就可以了吗?

  现在我们可以来编写一个脚本了。以VBS为例,我们可以用记事本新建一个文件,然后输入(其中“//”后的文字为注释,不必输入):

  //定义对象,要编辑注册表,我们需要使用WSHShell对象及其方法

  Dim WSHShell

  //对象的方法CreateObject来创建WSHShell对象

  Set WSHShell = WScript.CreateObject("WScript.Shell")

  //然后我们使用WSHShell对象的方法RegDelete来删除 HKEY_CURRENT_USERSoftwareMicrosoft

  WindowsCurrentVersionExplorerRunMRU子键

  WSHShell.RegDelete "HKCUSoftwareMicrosoft

  WindowsCurrentVersionExplorerRunMRU"

  //最后我们恢复该主键,并在该主键下恢复字符串值“MRUList”,设置其数据为空串

 WSHShell.RegWrite "HKCUSoftwareMicrosoft

  WindowsCurrentVersionExplorerRunMRUMRUList",""

  程序到此结束,我们把文件另存为CleanMRU.vbs就可以了。现在我们就可以使用Scripting Engine来执行这个程序了。假设我们刚才把这个文件保存在D:TEMP里,我们就可以使用“开始”菜单的“运行”——Wcript.exe D:TEMPCleanMRU.vbs。重新启动,怎么样?“运行”里已经是空空如也了吧!

  如果我们这样费尽心思地编了程序,最后还是得靠手工来运行,那还不如每次直接用注册表编辑器来操作呢!其实我们完全可以让它在每次开机时自动加载。这么一说,大家肯定都知道了——我们可以使用注册表编辑器,在“HKEY_LOCAL_MACHINESoftwareMicrosoftWindows

  CurrentVersionRun”子主键下建立一个字符串值 “CleanMRU”,设置其数据为"Wcript.exe D:TEMPCleanMRU.vbs"。嘿嘿,这样才算大功告成。以后你每次开机,Windows就会自动执行该脚本以清除 “运行”中的历史记录了。

  限于篇幅,本文仅仅介绍了WSH有关注册表修改部分的对象的初步使用。我们只要在脚本里加上一些简单的语句,就可以很方便地实现交互性的操作——当然,这就需要大家掌握更多的关于WSH和VBScript的知识。如果感兴趣的话,大家可以到微软网站下载有关WSH和VBScript的帮助文档,URL分别是http://www.microsoft.com/china/ scripting/windowshost/wshdoc.exe和http://www.microsoft.com/china/scripting/vbscript/download/ vbsdoc.exe(都是中文)。另外,在Windows的Samples目录下,有一个WSH文件夹,那里面有不少.vbs和.js例程,大家可以去打开来看看(鼠标右击图标,选择“编辑”),相信一定会有不少收获的。

  最后,如果你的机器上已经安装了Windows Scripting Host,而VBS程序仍然无法运行的话,很可能是你自己或其他应用程序修改了.VBS的关联。据笔者所知,几乎每台机器上都装有的“超级解霸”就会修改.VBS文件的关联。没关系的,你只要从“控制面板”—“添加/删除程序”—“Windows安装程序”—“附件”—“详细资料”里先卸掉,然后再重新装上“Windows Scripting Host”就可以了。

(0)

相关推荐

  • vbs 注册表操作代码(添加删除)

    1.读注册表的关键词和值: 可以通过把关键词的完整路径传递给wshshell对象的regread方法.例如: 复制代码 代码如下: set ws=wscript.createobject("wscript.shell") v=ws.regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\nwiz") wscript.echo v 2.写注册表 使用wshshell对象的reg

  • VBS脚本使用WMI操作注册表的代码第1/2页

    oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath oReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue    oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue    oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPat

  • vbs 注册表操作类代码

    复制代码 代码如下: Option Explicit Const WBEM_MAX_WAIT = &H80 ' Registry Hives Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_CURRENT_USER = &H80000001 Const HKEY_CLASSES_ROOT = &H80000000 Const HKEY_USERS = &H80000003 Const HKEY_CURRENT_CON

  • VBS通过WMI监视注册表变动的代码

    Google一下"VBS监视注册表",TOP 5都是一模一样的代码,我查了一下,出处是Hey, Scripting Guy! Blog上一篇名为<How Can I Monitor Changes to a Registry Key?>的文章,真是厚颜无耻. 文章我没时间翻译了,贴一下代码: 复制代码 代码如下: strComputer = "." Set objWMIService = GetObject("winmgmts:\\"

  • vbs删除注册表项的代码

    WScript.Echo "Enabling Kerberos Logging..." const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_  strComputer & "\root\default:StdRegPro

  • vbscript 注册表脚本书写

    WScript.Echo "Enabling Kerberos Logging..." const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set StdOut = WScript.StdOut Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_  strComputer & &

  • VBS读取注册表的两种方法

    第一种 通过wshshell对象的regread 复制代码 代码如下: RegValue = CreateObject("Wscript.Shell").RegRead("\XXXX_XXXXXXXX_XXX\XXX\XXXX")Msgbox(RegValue) 更多的操作可以参考这篇文章 http://www.jb51.net/article/18125.htm 第二种方法: 通过wmi 复制代码 代码如下: Const HKLM = &H80000002

  • vbscript Registry 注册表操作实现代码(读写删除)

    VBScript Code: 复制代码 代码如下: ' Create a WSH Shell object: Set wshShell = CreateObject( "WScript.Shell" ) ' ' Create a new key: wshShell.RegWrite "HKCU\TestKey\", "" ' Create a new DWORD value: wshShell.RegWrite "HKCU\TestKe

  • 用vbs操作注册表实例代码

    打开或关闭CMD: Dim WSHShell, r, m, v, t, g Dim i On Error Resume Next Set WSHShell=WScript.CreateObject("WScript.Shell") v="HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\system\DisableCMD" i="REG_DWORD" t="命令提示窗口开关&qu

  • Vbscript写注册表的方法

    分类:程序 早些年用过DOS系统的用户都知道,MS-DOS操作系统允许普通用户编写批处理文件来实现简单的编程.它有效地简化了我们的工作,带给我们许多方便.当时甚至出现了一些专门编写批处理文件的程序员呢. 事实上,操作系统除了提供易于操作的使用界面外,还应当有一套内建的Script(脚本)语言才算完整.从某种角度来说,批处理文件可以说就是MS-DOS下的脚本语言.到了Windows时代,虽然Windows系统仍然保留了批处理,但是批处理在Windows中就显得功能过于简单,无法满足用户的需要了--

  • C#操作注册表的方法详解

    本文实例讲述了C#操作注册表的方法.分享给大家供大家参考,具体如下: 下面我们就来用.NET下托管语言C#注册表操作,主要内容包括:注册表项的创建,打开与删除.键值的创建(设置值.修改),读取和删除.判断注册表项是否存在.判断键值是否存在. 准备工作: 1. 要操作注册表,我们必须要引入必要的命名空间: 复制代码 代码如下: using Microsoft.Win32; 在这个命名空间里面包含了许多注册表相关的类,足够我们使用了~~ 2. 命名空间里面提供了一个类:RegistryKey 利用它

  • c++ 写注册表方式让程序开机自启动

    打开注册表:win+R, 输入regedit 点击确定 你会看到五个根目录,开机自启动的信息写在 HKEY_LOCAL_MACHINE 下面,具体的目录为 SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run 要怎么将开机自启动的信息写入注册表中呢?其实过程很简单,第一步,打开注册表,第二步,写注册表,第三步,关闭键的句柄 打开注册表要使用RegOpenKeyEx 函数 LONGRegOpenKeyEx( HKEYhKey, // 需要打开的主键的名

  • Python实现操纵控制windows注册表的方法分析

    本文实例讲述了Python实现操纵控制windows注册表的方法.分享给大家供大家参考,具体如下: 使用_winreg模块的话 基本概念: KEY 键 Value 值 函数和作用: CloseKey() - 关闭一个Key ConnectRegistry() - 链接到其他机器的注册表 CreateKey() - 创建一个Key DeleteKey() - 删除一个Key DeleteValue() - 删除一个Key里面的值(value) EnumKey() - 为已经打开的Key里面的子键建

  • python3操作注册表的方法(Url protocol)

    使用python操作注册表的方法最近学习了一下,现在做一下笔记,由于对Python语言的使用还不是很熟练,所以写不出高大上的结构,但是解决问题搓搓有余了. 说道注册表顺便也说一说环境变量的修改(放下下一节讲),里面有许多相似的地方,我觉得放在一起说会比较合适. 操作注册表 操作注册表主要引入winreg包,winreg包是python3自带的包,python2的名字和python3有区别_winreg,在这里只关注python3 key = winreg.OpenKeyEx(winreg.HKE

  • vb.net操作注册表的方法分析【增加,修改,删除,查询】

    本文实例讲述了vb.net操作注册表的方法.分享给大家供大家参考,具体如下: 增加: Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software/Faxturer", True) Dim subkey As Microsoft.Win32.RegistryKey subkey = key.CreateSubKey("Manu")

  • 彻底删除SQL Server注册表的方法

    一般在卸载完数据库时,大家都希望能够将注册表信息完全删干净,下面就将教您彻底删除SQL Server注册表的方法,供您参考. 在卸载SQL Server开始--运行:输入regedit 进入注册表编辑器,进入之后执行下列操作: 1.彻底删除SQL Server: hkey_local_machine\software\Microsoft\MSSQLServer hkey_local_machine\software\Microsoft\Microsoft SQL Server hkey_curr

  • C#操作windows注册表的方法

    本文实例讲述了C#操作windows注册表的方法.分享给大家供大家参考.具体如下: 此代码演示了如何读取和写入注册表 读取注册表: private string GetRegistShellData(string RegistName) { try { string registData, SubregistData; RegistryKey hkml = Registry.LocalMachine; RegistryKey software = hkml.OpenSubKey(@"SOFTWA

  • 详解JavaScript修改注册表的方法

    本实例主要通过WshShell 对象的相关方法实现.WshShell对象是WSH(WSH是Windows ing Host的缩写,内嵌于Windows操作系统中的脚本语言工作环境)的内建对象,主要负责程序的本地运行.处理注册表.创建快捷方式.获取系统文件夹信息及处理环境变量等工作. WshShell 对象的相关方法如表11.1所示. 本实例中主要应用了 RegWrite方法,下面将对该方法进行详细介绍. RegWrite方法用于在注册表中设置指定的键或值,其语法格式如下: WshShell.Re

随机推荐