注册表

1.概述

是微软的一个数据库,用于存储系统和应用程序的设置信息。参数包括控制windows的启动,硬件驱动及windows应用程序的运行。非常重要,谨慎操作

  • 数据结构

注册表由键,子键,值项构成。
键:分支中的一个文件夹。可以有一个或多个值,每个值名称不相同。
子键:文件夹中的子文件夹
值:键的当前定义。包括名称、数据类型及分配的值组成。

  • 数据类型

REG_SZ:字符串 ,文本字符串
REG_MULTI_SZ:多字符串值,含有多个文本的字符串
REG_BINARY:二进制。以16进制显示
REG_DWORD:双字值。32位的二进制值,显示为8位的16进制值

2.命令行操作

2.1 打开
在cmd中输入regedit,打开
在这里插入图片描述
打开之后注册表如下
注册表_第1张图片
但是每次都需要这样打开,尤其调试程序的时候会有些不方便,下面我们看看控制台如何操作
2.2添加
reg add “HKCU\Software\Microsoft\Windows\CurrentVersion\test” /v “test” /t REG_SZ /d “c:\windows\system32\regedit”
在每个项中最好使用“”括起来,防止中间出现的空格

  1. 语法

可以输入:reg add /?,查看命令及常用例子
REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]
[/reg:32 | /reg:64]

KeyName [\Machine]FullKey
Machine 远程机器名 - 忽略默认到当前机器。远程机器上
只有 HKLM 和 HKU 可用。
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下注册表项的完整名称。

/v 所选项之下要添加的值名称。
/ve 为注册表项添加空白值名称(默认)。
/t RegKey 数据类型
[ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ |
REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ]
如果忽略,则采用 REG_SZ。
/s 指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符
如果忽略,则将 “\0” 用作分隔符。
/d 要分配给添加的注册表 ValueName 的数据。
/f 不用提示就强行覆盖现有注册表项。
/reg:32 指定应该使用 32 位注册表视图访问的注册表项。
/reg:64 指定应该使用 64 位注册表视图访问的注册表项。

例如:

REG ADD \ABC\HKLM\Software\MyCo
添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo
REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead)
REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail
添加一个值(名称: MRU,类型: REG_MULTI_SZ,数据: fax\0mail\0\0)
REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d %systemroot%
添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%)
注意: 在扩充字符串中使用插入符号 ( ^ )

2)结果
在这里插入图片描述
如果不是很熟悉语法,可以使用命令
reg add /?

2.3 删除
reg delete /?
REG DELETE KeyName [/v ValueName | /ve | /va] [/f] [/reg:32 | /reg:64]

KeyName [\Machine]FullKey
远程机器名 - 如果省略,默认情况下将使用当前机器。
远程机器上只有 HKLM 和 HKU 可用。
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下面的注册表项的全名。

ValueName 所选项下面的要删除的值名称。
如果省略,则删除该项下面的所有子项和值。

/ve 删除空值名称的值(默认)。
/va 删除该项下面的所有值。
/f 不用提示,强制删除。
/reg:32 指定应使用 32 位注册表视图访问
注册表项。
/reg:64 指定应使用 64 位注册表视图访问
注册表项。

示例
REG DELETE HKLM\Software\MyCo\MyApp\Timeout
删除注册表项 Timeout 及其所有子项和值

REG DELETE \ZODIAC\HKLM\Software\MyCo /v MTU
删除 ZODIAC 上的 MyCo 下面的注册表值 MTU

2.4 修改
依然可以使用Add 命令
在这里插入图片描述
查看修改后的值
在这里插入图片描述
2.5 查询
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\test

1)语法

C:\Users\jintang2>reg query /?

REG QUERY KeyName [/v [ValueName] | /ve] [/s]
[/f Data [/k] [/d] [/c] [/e]] [/t Type] [/z] [/se Separator]
[/reg:32 | /reg:64]

KeyName [\Machine]FullKey
Machine - 远程机器名称,省略当前机器的默认值。在远程机器上
只有 HKLM 和 HKU 可用。
FullKey - 以 ROOTKEY\SubKey 名称形式
ROOTKEY - [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey - 在选择的 ROOTKEY 下的注册表项的全名

/v 具体的注册表项值的查询。
如果省略,会查询该项的所有值。
只有与 /f 开关一起指定的情况下,此开关的参数才是可选的。它指定
只在值名称中搜索。
/ve 查询默认值或空值名称(默认)。
/s 循环查询所有子项和值(如 dir /s)。
/se 为 REG_MULTI_SZ 在数据字符串中指定分隔符(长度只为 1 个字符)。
默认分隔符为 “\0”。
/f 指定搜索的数据或模式。
如果字符串包含空格,请使用双引号。默认为 “*”。
/k 指定只在项名称中搜索。
/d 指定只在数据中搜索。
/c 指定搜索时区分大小写。
默认搜索为不区分大小写。
/e 指定只返回完全匹配。
默认是返回所有匹配。
/t 指定注册表值数据类型。
有效的类型是:
REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ,
REG_DWORD, REG_QWORD, REG_BINARY, REG_NONE
默认为所有类型。
/z 详细: 显示值名称类型的数字等值。
/reg:32 指定应该使用 32 位注册表视图访问的注册表项。

/reg:64 指定应该使用 64 位注册表视图访问的注册表项。

示例:

REG QUERY HKLM\Software\Microsoft\ResKit /v Version
显示注册表值 Version 的值

REG QUERY \ABC\HKLM\Software\Microsoft\ResKit\Nt\Setup /s
显示远程机器 ABC 上的、在注册表项设置下的所有子项和值

REG QUERY HKLM\Software\Microsoft\ResKit\Nt\Setup /se #
用 “#” 作为分隔符,显示类型为 REG_MULTI_SZ 的所有值名称的所有
子项和值。

REG QUERY HKLM /f SYSTEM /t REG_SZ /c /e
以区分大小写的形式显示项、值和数据和数据类型 REG_SZ
的、在 HKLM 更目录下的、“SYSTEM” 出现的精确次数

REG QUERY HKCU /f 0F /d /t REG_BINARY
显示在 HKCU 根目录下、数据类型为 REG_BINARY 的数据的项、值和
数据的 “0F” 出现的次数。

REG QUERY HKLM\SOFTWARE /ve
显示在 HKLM\SOFTWARE 下的项、值和数据(默认)
2)结果
在这里插入图片描述

如果不确定有哪些命令
Reg /?
REG Operation [Parameter List]

Operation [ QUERY | ADD | DELETE | COPY |
SAVE | LOAD | UNLOAD | RESTORE |
COMPARE | EXPORT | IMPORT | FLAGS ]

3.程序

使用CRegKey,可以对注册表的分支或者子键进行操作
查询
RegKey.Create
返回结果是ERROR_SUCCESS则代表操作成功

  • 设置值

SetValue,如果不存在,添加该键,否则,修改已经存在的键值。函数原型:
LONG SetValue( DWORD dwValue, LPCTSTR lpszValueName );

 DWORD dwValue = (DWORD)param;
    CRegKey RegKey;
    long nRet = RegKey.Create(HKEY_CURRENT_USER, TEST);
    if (nRet == ERROR_SUCCESS)
    {
        nRet = RegKey.SetValue(dwValue, "test");
    }

上述代码在HKEY_CURRENT_USER的分支下,创建名为TEST的项目

  • 查询

函数原型
LONG QueryValue( DWORD& dwValue, LPCTSTR lpszValueName );
Long nRet = RegKey.QueryValue(dwValue, “test”);

  • 删除

RegKey.DeleteValue(CALLLIST_REG_VALUE);
函数原型
LONG DeleteValue( LPCTSTR lpszValue );
直接删除lpszValue键

你可能感兴趣的:(C++编程)