「Win」Windows注册表介绍与操作

在这里插入图片描述

✨博客主页:何曾参静谧的博客
文章专栏:「Win」Windows程序设计


相关术语

Windows的注册表:是一个重要的系统组件,用于存储操作系统和应用程序的配置信息。它类似于一个数据库,包含了各种键值对、参数、设置等,可以通过注册表来管理和修改系统和应用程序的行为。在本文中,我们将详细介绍Windows的注册表,包括其结构、功能和使用方法。

一、 注册表的结构

Windows的注册表由多个键(Key)和值(Value)组成,可以看作一个树形结构。

内容 描述
HKEY_CLASSES_ROOT 表示所有文件类型的类信息
HKEY_CURRENT_USER 表示当前用户的设置信息
HKEY_LOCAL_MACHINE 表示计算机的硬件和软件信息
HKEY_USERS 表示所有用户的设置信息
HKEY_CURRENT_CONFIG 表示当前计算机的设置信息

「Win」Windows注册表介绍与操作_第1张图片

二、注册表的功能

Windows的注册表具有以下功能:

  • 存储系统和应用程序的配置信息:Windows和应用程序可以将自己的配置信息保存到注册表中,以便在下次启动时快速读取和应用这些设置。
  • 管理系统和应用程序的行为:通过修改注册表中的键值对,可以改变系统和应用程序的行为,例如修改桌面背景、禁用某些功能、设置默认打开方式等。
  • 维护系统的安全性:Windows可以使用注册表来存储用户的安全设置,例如密码策略、用户权限等。
  • 支持应用程序的扩展:应用程序可以使用注册表来存储自己的设置和配置信息,以便进行扩展和定制。

三、注册表的使用方法

Windows提供了多种方式来访问和修改注册表,包括:

  • 使用Regedit.exe:Regedit.exe是Windows自带的注册表编辑器,可以用来查看和修改注册表中的键值对。打开Regedit.exe后,可以选择需要查看或修改的节点,然后双击该节点下的键值对进行编辑。Win+R输入:regedit
  • 使用Reg.exe:Reg.exe是Windows命令行工具,可以用来在命令行中访问和修改注册表。例如,可以使用“reg query”命令来查询注册表中的键值对,“reg add”命令来添加新的键值对,“reg delete”命令来删除键值对等。
  • 使用API:Windows还提供了一组API,可以在程序中访问和修改注册表。例如,可以使用RegOpenKeyEx函数打开一个注册表的键,使用RegQueryValueEx函数查询一个键值对的值,使用RegSetValueEx函数设置一个键值对的值等。

四、API调用

函数名称 功能描述
RegOpenKeyEx 打开指定的注册表键
RegCreateKeyEx 创建一个新的注册表键
RegQueryValueEx 查询指定键的值
RegSetValueEx 设置指定键的值
RegDeleteValue 删除指定键的值
RegDeleteKey 删除指定的注册表键
RegEnumKeyEx 枚举指定键的子键

在示例代码中,我们首先使用RegOpenKeyEx函数打开了HKEY_CURRENT_USER\Control Panel\Desktop节点,然后使用RegQueryValueEx函数查询了WallpaperStyle键的值,并将其输出到控制台上。接着使用RegCreateKeyEx函数创建了一个新的注册表键Software\MyApp,并指定了KEY_WRITE标志,表示要修改该节点下的键值对。然后使用RegSetValueEx函数设置了MyValue键的值为2。最后使用RegDeleteValue函数删除了MyValue键值对,并使用RegCloseKey函数关闭了注册表键。

#include 
#include 

int main()
{
    HKEY hKey;
    DWORD dwType, dwSize, dwValue;
    LONG lRet;

    // 打开注册表键
    lRet = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\Desktop"), 0, KEY_READ, &hKey);
    if (lRet != ERROR_SUCCESS)
    {
        std::cerr << "Error opening key" << std::endl;
        return 1;
    }

    // 查询键值的值
    dwSize = sizeof(DWORD);
    lRet = RegQueryValueEx(hKey, TEXT("WallpaperStyle"), NULL, &dwType, (LPBYTE)&dwValue, &dwSize);
    if (lRet != ERROR_SUCCESS)
    {
        std::cerr << "Error querying value" << std::endl;
        RegCloseKey(hKey);
        return 1;
    }

    // 输出键值的值
    std::cout << "WallpaperStyle = " << dwValue << std::endl;

    // 关闭注册表键
    RegCloseKey(hKey);

    // 创建新的注册表键
    lRet = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\MyApp"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
    if (lRet != ERROR_SUCCESS)
    {
        std::cerr << "Error creating key" << std::endl;
        return 1;
    }

    // 设置键值的值
    dwValue = 2;
    lRet = RegSetValueEx(hKey, TEXT("MyValue"), 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
    if (lRet != ERROR_SUCCESS)
    {
        std::cerr << "Error setting value" << std::endl;
        RegCloseKey(hKey);
        return 1;
    }

    // 删除键值对
    lRet = RegDeleteValue(hKey, TEXT("MyValue"));
    if (lRet != ERROR_SUCCESS)
    {
        std::cerr << "Error deleting value" << std::endl;
        RegCloseKey(hKey);
        return 1;
    }

    // 关闭注册表键
    RegCloseKey(hKey);

    return 0;
}

在示例代码中,我们首先使用RegOpenKeyEx函数打开了HKEY_LOCAL_MACHINE\SOFTWARE节点,然后使用RegEnumKeyEx函数枚举了该节点下的所有子键,并将其输出到控制台上。最后使用RegCloseKey函数关闭了注册表键。

#include 
#include 

int main()
{
    HKEY hKey;
    DWORD dwIndex = 0, dwNameSize = MAX_PATH;
    TCHAR szKeyName[MAX_PATH];
    LONG lRet;

    // 打开注册表键
    lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE"), 0, KEY_READ, &hKey);
    if (lRet != ERROR_SUCCESS)
    {
        std::cerr << "Error opening key" << std::endl;
        return 1;
    }

    // 枚举子键
    while ((lRet = RegEnumKeyEx(hKey, dwIndex++, szKeyName, &dwNameSize, NULL, NULL, NULL, NULL)) == ERROR_SUCCESS)
    {
        // 输出子键名称
        std::wcout << szKeyName << std::endl;

        // 重置缓冲区大小
        dwNameSize = MAX_PATH;
    }

    // 关闭注册表键
    RegCloseKey(hKey);

    return 0;
}

五、注意事项

总之,Windows的注册表是一个重要的系统组件,用于存储系统和应用程序的配置信息。通过访问和修改注册表,可以改变系统和应用程序的行为,实现个性化定制和扩展。不过,在使用注册表时需要小心,避免误操作和损坏系统。如果不确定如何操作,建议先备份注册表,以免数据丢失。


在这里插入图片描述

你可能感兴趣的:(windows,microsoft,c++)