VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 255|回复: 0

VC++高级班之注册表篇-[1]认识并操作注册表

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-3-23 00:41:20 | 显示全部楼层 |阅读模式
①、注册表简介:
注册表到底是个什么东西?
注册表实际上是一个管理配置系统运行参数的核心数据库,它记录了安装软件与运行程序的关联关系,计算机的硬件配置等信息。可以说计算机上所有针对硬件、软件、网络的操作都是源于注册表的。
可以使用 regedit.exe 这个系统提供的注册表编辑器去管理编辑注册表,他只是一个编辑器不是注册表的文件。

注册表内的所有信息都是存放在 System.dat、User.dat 文件中的,其中 System.dat 文件包含了所有的硬件信息和软件信息,User.dat 包含了用户信息。
如果在系统中配置了两个或两个以上的用户,在 Windows\Profile\用户名目录 中还存放有各个用户的 User.dat 文件,这些文件都是二进制数据文件,
修改注册表实际上就是对上述的三个文件进行修改。但是,我们不能对这些二进制数据文件进行直接修改,而必须要借助于注册表编辑器。

注册表编辑器实际上就是我们查看和修改注册表文件的图形界面。

Windows XP 注册表的结构
  Windows XP的注册表同样是以树形结构组织的。它由两个注册表子目录树组成:HKEY_LOCAL_MACHINE 和 HKEY_USERS。
但是为了使注册表中的信息更易于查找,Windows XP 预定义了五个子目录树。

具体见:注册表结构图
===================================================
②、常用的注册表的键值类型:
其他不常用格式具体见MSDN:
REG_BINARY:未处理的二进制数据。多数硬件组件信息都是以二进制存储,而以十六进制格式显示在注册表编辑器中;
REG_WORD:数据由4字节长的数表示。许多设备驱动程序和服务的参数是这种类型,并在注册表编辑器中以二进制、十六进制或十进制的格式显示;
REG_EXPAND_SZ:长度可变的数据串。该数据类型包含在程序或服务使用该数据时确定的变量
REG_MULTI_SZ:多重字符串。其中包含格式可被用户读取的列表。项用空格、逗号、或其他标记分开;
REG_SZ:固定长度的文本串;

注册表示例:
1、系统启动项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
2、文件类型注册,为指定的文件类型关联打开的可执行程序;
===================================================
③、几个根键的用途说明:

HKEY_LOCAL_MACHINE 根键中包含了操作系统、安装软件及硬件的相关信息。如计算机总线类型、系统可用内存、当前装载了哪些设备驱动程序以及启动控制数据等。
实际上,HKEY_LOCAL_MACHINE 根键保存着注册表中的大部分信息,而另外4个根键都是其子键的别名。

HKEY_CURRENT_USER 根键包含这当前登录到计算机上的用户的配置文件。其子键包含着环境变量、个人程序组、桌面设置、网络连接、打印机和应用程序首选项等信息。
计算机把当前用户的信息映射到这个根键下,若未激活用户配置,则它指向子键 HKEY_USERS\.DEFAULT。

HKEY_CLASSES_ROOT 根键记录的是系统中各类文件与其应用程序之间的对应关系,即记录了某类文件和打开该类文件的应用程序之间的相互关联关系。
HKEY_CLASSES_ROOT 根键是 HKEY_LOCAL_MACHINE\SOFTWARE\Classes 的快捷方式,是注册表的一个最大分支,包括了成千上万的与程序、文件相关联的键和值以及ActiveX类的定义等内容。

HKEY_USERS 根键下包含了计算机的所有用户的信息。用户根据个人爱好设置的诸如桌面、背景、开始菜单程序项、应用程序快捷键、显示字体、屏幕节电设置等信息均记录在这个跟建中
HKEY_CURRENT_USER 也是 HKEY_USERS 其中的的一个快捷键部分。

HKEY_CURRENT_CONFIG 根键包含的主要内容是计算机的当前配置情况,如显示器、打印机等可选外部设备及其设置信息等。
===================================================
④、注册表的键的打开与关闭:

注册表的键的打开:RegOpenKey 与 RegOpenKeyEx
  1. LONG WINAPI RegOpenKeyEx(
  2.   __in          HKEY hKey,
  3.   __in          LPCTSTR lpSubKey,
  4.   DWORD ulOptions,
  5.   __in          REGSAM samDesired,
  6.   __out         PHKEY phkResult
  7. );
复制代码


注册表的关闭:RegCloseKey

  1. void CRegTestDlg::OnBnClickedBtn()
  2. {
  3.         HKEY hKey = NULL;
  4.         TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
  5.         LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  6.         if (lRet == ERROR_SUCCESS){
  7.                 MessageBox(_T("打开成功!"));
  8.         }else{
  9.                 MessageBox(_T("打开失败!"));
  10.         }

  11.         RegCloseKey(hKey);
  12. }
复制代码

===================================================
⑤、注册表的键的创建与删除:

注册表的键创建:RegCreateKey 与 RegCreateKeyEx (也可以打开指定的键,同时可以创建n层深的一个子键)
  1. LONG WINAPI RegCreateKeyEx(
  2.   __in          HKEY hKey,
  3.   __in          LPCTSTR lpSubKey,
  4.   DWORD Reserved,
  5.   __in          LPTSTR lpClass,
  6.   __in          DWORD dwOptions,
  7.   __in          REGSAM samDesired,
  8.   __in          LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  9.   __out         PHKEY phkResult,
  10.   __out         LPDWORD lpdwDisposition
  11. );
复制代码


注册表的键删除:RegDeleteKey 与 RegDeleteKeyEx(x64)
  1. LONG WINAPI RegDeleteKey(
  2.   __in          HKEY hKey,
  3.   __in          LPCTSTR lpSubKey
  4. );
复制代码

===================================================
※※※ 小作业:练习本节课介绍的相关 API 函数的使用以及相关的 Shell 注册表操作函数!
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
教程介绍及详情请见:https://www.cctry.com/static/vip/index.html
VC驿站Vip会员详情请见:https://www.cctry.com/static/vip/index.html




上一篇:VC++高级班之窗口篇-[20]单文档程序之窗口分割
下一篇:VC++高级班之注册表篇-[2]注册表中键的相关操作

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-14 14:54

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表