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

news2024/11/25 12:47:52

在这里插入图片描述

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


相关术语

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

一、 注册表的结构

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

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

在这里插入图片描述

二、注册表的功能

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 <Windows.h>
#include <iostream>

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 <Windows.h>
#include <iostream>

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


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue报错:Error: error:0308010C:digital envelope routines::unsupported解决

问题 node 环境 Node.js v18.14.2 使用npm start.出现以下报错 Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:71:19) at Object.createHash (node:crypto:133:10) at module.exports (F:\RuoYi-Cloud\CourseSched…

SWAT模型系统学习(建模方法、实例应用、高级进阶)

目前&#xff0c;水环境问题逐渐成为制约社会经济和环境可持续发展的重要因素。根据国内外研究表明&#xff0c;受全球环境变化和经济快速发展的影响&#xff0c;面源污染已逐渐成为水环境污染的第一因素。但面源污染由于具有排放分散、隐蔽&#xff0c;排污随机、不确定、不易…

搜索算法(三) 回溯法

1.回溯法 回溯法可以理解成一种特殊的深度优先算法&#xff0c;比起普通的DFS&#xff0c;多了还原当前节点的一步。 修改当前节点、递归子节点、还原当前节点。 本质是一种试错的思想。 维基百科&#xff1a; 2.例题 1&#xff09; 力扣https://leetcode.cn/problems/pe…

树莓派安装系统

0. 实验准备 树莓派一个&#xff0c;TF卡&#xff08;4GB以上&#xff09;一个&#xff0c;读卡器一个 1. 使用官方提供的工具 在搜索引擎中搜索树莓派&#xff08;不要用百度&#xff0c;建议使用必应的国际版进行搜索&#xff09;&#xff0c;我这里直接放上树莓派官方超链…

深入篇【Linux】学习必备:理解【Linux软件包管理器】yum + yum的具体使用 + yum下载的有趣指令

这里写目录标题 Ⅰ.Linux软件包管理器yum①.什么是软件包/什么是yum②.linux的软件生态与yum源③.关于rzsz Ⅱ.yum基本指令①.查看软件②.安装软件③.卸载软件 Ⅲ.yum下载的好玩指令①.sl②.linux_logo③.elinks Ⅰ.Linux软件包管理器yum yum 是一个 Shell 前端软件包管理器。基…

C++ 多态 最详细图文+代码讲解

感谢各位 点赞 收藏 评论 三连支持 本文章收录于专栏【C进阶】 ❀希望能对大家有所帮助❀ 本文章由 风君子吖 原创 回顾 上篇文章&#xff0c;我们学习了继承的相关知识&#xff0c;详细解刨了继承中的各种细节&#xff0c;而本章内容将在继承的基础上学习多态 多态的概念…

Dreamweaver如何进行网页开发?

文章目录 0.引言1.安装Dreamweaver2.编写第一个网页 0.引言 笔者本科学习的编程语言主要是关于桌面开发的&#xff0c;对编程有一定的基础&#xff0c;而编程除了关于桌面软件开发&#xff08;VisualStudio如何进行桌面软件开发&#xff1f;&#xff09;&#xff0c;还有手机应…

网络安全自学笔记+学习路线(超详细)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

c语言编程练习题:7-193 两小时学完C语言

#include <stdio.h> int main(){int n,k,m;int sum;if (scanf("%d %d %d",&n,&k,&m)!EOF){sum n-k*m;}printf("%d",sum);return 0; }

(学习日记)2023.04.28

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

基于SSM的教务管理系统的设计与实现(论文+源码)_kaic

摘 要 学校教务管理信息化是提高办公效率的主要途径。随着中国高等教育的快速发展和学校规模的不断扩大&#xff0c;在校学生人数不断增加&#xff0c;办学层次出现多元化&#xff0c;由一地办学发展到多地多点办学&#xff0c;同时进一步推行学分制。这些变化使得教务部门的管…

【AI绘图】四、stable difusion提示词如何写?

上一篇&#xff1a;【AI绘图】三、stable diffussion操作界面介绍以及如何使用 如何写好提示词&#xff1f; 写出一份比较好的提示词是文生图技术的关键。但是&#xff0c;写出一份好的prompt并不容易&#xff0c;下面针对“如何写好提示词”这个问题&#xff0c;从提示词构成…

MySQL 数据操纵语言 DML

文章目录 数据操纵语言 DMLINSERT 语句UPDATE 语句DELETE 语句 数据操纵语言 DML 数据操纵语言&#xff08;Data Manipulation Language&#xff0c;DML&#xff09;是 SQL 语言的核心部分之一。在添加、更新或者删除表中的数据时&#xff0c;需要执行 DML 语句。很多时候我们提…

Unity导入Android aar包实现交互全流程

一.搭建Android项目 1.创建一个Android空项目 点击finish后,就等待编译,过程中会自动下载一些插件 等待... 等待... 编译完成: 2.创建Module 右键该工程的app,新建一个Module, Language:Kotlin语法和Java语法,语法不同,后续创建的代码文件有所差异,但不影响代码编…

地震勘探基础(六)之地震反褶积

地震反褶积 地震资料常规处理主要包括地震反褶积&#xff0c;水平叠加和偏移成像三大内容。水平叠加可以提高地震资料的信噪比&#xff0c;偏移成像可以提高地震资料的空间分辨率和保真度&#xff0c;地震反褶积可以提高地震资料的分辨率和压制干扰波。 1954年&#xff0c;Ro…

Python心经(5)

目录 python对于类和实例&#xff0c;&#xff0c;都能随时动态绑定 属性或者函数 可以通过__slots__去限定实例所能绑定属性的范围 python里面类很多定制函数__xx__ 下面给个python里面枚举类型 对type函数去实现 有关迭代器&#xff1a; 生成器&#xff1a; 可迭代对…

【Linux编译器gcc/g++】带你了解代码是如何变成可执行程序的!

Linux编辑器gcc/g的使用 背景知识gcc的使用预处理&#xff08;进行宏替换&#xff09;编译(生成汇编)汇编(生成及其可识别代码)链接(生成可执行文件或者库文件)库 动态库vs静态库 debug和release&#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x…

【FPGA零基础学习之旅#6】ip核基础知识之计数器

&#x1f389;欢迎来到FPGA专栏~ip核基础知识之计数器 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家…

[网络工程]小型局域网组建的常用命令(ENSP)

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 目录 1、引言2、常用命令(ENSP)常规VTYConsole端口安全单臂路由DHCPNATACL基础ACL高级ACL GVRPSTP 1、引言 局域网&#xff08;Local A…