VC操作注册表例子,编译执行成功。 #include "stdafx.h" #include <afx.h> #include <windows.h> #include <winreg.h> int main(int argc, char* argv[]) { HKEY hKey; //定义有关的hKey,在查询结束时要关闭。 LPCTSTR path = "Software\\Microsoft\\MS Setup (ACME)\\User Info"; LONG return0=(::RegOpenKeyEx(HKEY_CURRENT_USER,path,0,KEY_READ,&hKey;)); if(return0!=ERROR_SUCCESS) { ::MessageBox(NULL, "错误:无法打开有关的键!",NULL,MB_ICONERROR | MB_OK); return 1; } ### VC操作注册表实例解析 在本篇内容中,我们将深入了解如何使用Visual C++(简称VC)进行注册表的操作,并具体分析一个简单的示例代码。该示例代码展示了如何使用VC来读取Windows注册表中的特定键值。此外,本文还将深入探讨与注册表操作相关的几个关键函数,包括`RegCreateKeyEx`、`RegOpenKeyEx`以及`RegQueryValueEx`。 #### 示例代码解析 我们来看一下示例代码的关键部分: ```cpp #include "stdafx.h" #include <afx.h> #include <windows.h> #include <winreg.h> int main(int argc, char* argv[]) { HKEY hKey; // 定义有关的hKey,在查询结束时要关闭 LPCTSTR path = "Software\\Microsoft\\MS Setup (ACME)\\User Info"; LONG return0 = (::RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_READ, &hKey)); if (return0 != ERROR_SUCCESS) { ::MessageBox(NULL, "错误:无法打开有关的键!", NULL, MB_ICONERROR | MB_OK); return 1; } } ``` 此段代码的主要目的是打开一个注册表项,并检查是否成功打开了该键。下面将逐一解释每个关键步骤。 1. **头文件包含**: - `#include "stdafx.h"`:预编译头文件,通常用于加快编译速度。 - `#include <afx.h>`:MFC支持库的头文件。 - `#include <windows.h>`:Windows API头文件,包含了注册表操作所需的声明。 - `#include <winreg.h>`:注册表操作相关的API声明。 2. **注册表键的定义**: - `HKEY hKey;`:定义了一个`HKEY`类型的变量,用于存储打开的注册表键的句柄。 - `LPCTSTR path = "Software\\Microsoft\\MS Setup (ACME)\\User Info";`:定义了待访问的注册表键路径。 3. **打开注册表键**: - 使用`RegOpenKeyEx`函数尝试打开指定路径下的注册表键。函数原型如下: ```cpp LONG RegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD ulOption, REGSAM samDesired, PHKEY phkResult ); ``` - 参数解释: - `HKEY_CURRENT_USER`: 表示当前用户的配置文件。 - `path`: 要打开的子键路径。 - `0`: `ulOption`参数,通常设置为0。 - `KEY_READ`: 请求的权限类型,这里请求读取权限。 - `&hKey`: 打开成功后,返回的键句柄将被存储在此处。 4. **错误处理**: - 如果`RegOpenKeyEx`返回非零值,则表示打开失败,会弹出一个消息框提示错误,并返回1作为程序的退出状态码。 #### 注册表操作函数详解 接下来,我们将详细探讨三个重要的注册表操作函数:`RegCreateKeyEx`、`RegOpenKeyEx`和`RegQueryValueEx`。 1. **`RegCreateKeyEx`**: - **功能**:创建一个新的注册表键或打开已存在的键。 - **函数原型**: ```cpp LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition ); ``` - **参数详解**: - `hKey`: 指定要在哪个键下创建子键。 - `lpSubKey`: 指定要创建的子键的名称。 - `Reserved`: 必须设置为0。 - `lpClass`: 指定新键的类名,通常设置为NULL。 - `dwOptions`: 指定键的属性。 - `samDesired`: 指定请求的访问权限。 - `lpSecurityAttributes`: 指向一个`SECURITY_ATTRIBUTES`结构体,用于设置安全属性,通常设置为NULL。 - `phkResult`: 返回新创建的键的句柄。 - `lpdwDisposition`: 指定键的状态标志。 2. **`RegOpenKeyEx`**: - **功能**:打开一个已经存在的注册表键。 - **函数原型**: ```cpp LONG RegOpenKeyEx( HKEY hkey, LPCTSTR lpSubKey, DWORD ulOption, REGSAM samDesired, PHKEY phkResult ); ``` - **参数详解**: - `hkey`: 指定要在哪个键下打开子键。 - `lpSubKey`: 指定要打开的子键的名称。 - `ulOption`: 通常设置为0。 - `samDesired`: 指定请求的访问权限。 - `phkResult`: 返回打开的键的句柄。 3. **`RegQueryValueEx`**: - **功能**:查询注册表键中的值。 - **函数原型**: ```cpp LONG RegQueryValueEx( HKEY hKey, LPTSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); ``` - **参数详解**: - `hKey`: 已经打开的键的句柄。 - `lpValueName`: 指定要查询的值的名称。 - `lpReserved`: 必须设置为NULL。 - `lpType`: 指定返回的数据类型。 - `lpData`: 指向存储数据的缓冲区。 - `lpcbData`: 指向缓冲区大小的指针。 通过以上分析可以看出,这些函数提供了基本的注册表操作能力,如创建、打开和查询注册表键等。掌握这些函数的使用方法对于编写涉及系统配置管理的应用程序非常有用。希望以上内容能够帮助您更好地理解并应用这些技术。
通过RegCreateKeyEx函数可以在注册表中创建键,如果需要创建的键已经存在了,则打开键。函数原型如下:
LONG RegCreateKeyEx(
HKEY hKey,
LPCTSTR lpSubKey,
DWORD Reserved,
LPTSTR lpClass,
DWORD dwOptions,
REGSAM samDesired,
LPSECURITY_ATTRIBUTESlpSecurityAttributes,
PHKEY phkResult,
LPDWORD lpdwDisposition
);
各参数及返回值的含义如下:
・hKey为主键值,可以取下面的一些数值:
HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE
HKEY_USER、HKEY_PERFORMANCE_DATA(WINNT操作系统)
HKEY_DYN_DATA(WIN9X操作系统)
・参数lpSubKey为一个指向以零结尾的字符串的指针,其中包含将要创建或打开的子键的名称。子键不可以用反斜线(/)开始。该参数可以为NULL。
・Reserved保留,必须设置为0。
・参数lpClass一个指向包含键类型的字符串。如果该键已经存在,则忽略该参数。
・参数dwOptions为新创建的键设置一定的属性。可以取下面的一些数值:
REG_OPTION_NON_VOLATILE 新创建的键为一个非短暂性的键(数据信息保存在文件中,当系统重新启动时,数据信息恢复)
REG_OPTION_VOLATILE 新创建的键为一个短暂性的键(数据信息保存在内存中)。Windows95忽略该数值。
REG_OPTION_BACKUP_RESTORE 仅在WINNT中支持,可以提供优先级支持。
・参数samDesired用来设置对键访问的权限,可以取下面的一些数值:
KEY_CREATE_LINK 准许生成符号键
KEY_CREATE_SUB_KEY 准许生成子键
KEY_ENUMERATE_SUB_KEYS 准许生成枚举子键
KEY_NOTIFY 准许更换通告
KEY_QUERY_VALUE 准许查询子键
KEY_ALL_ACCESS 提供完全访问,是上面数值的组合
KEY_READ 是下面数值的组合:
KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY
KEY_SET_VALUE 准许设置子键的数值
KEY_WRITE 是下面数值的组合:
KEY_SET_VALUE、KEY_CREATE_SUB_KEY
・参数lpSecurityAttributes为一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否被子处理过程继承。如果该参数为NULL,则句柄不可以被继承。在WINNT中,该参数可以为新创建的键增加安全的描述。
・参数phkResult为一个指向新创建或打开的键的句柄的指针。
・参数lpdwDispition指明键是被创建还是被打开的,可以是下面的一些数值:
REG_CREATE_NEW_KEY 键先前不存在,现在被创建。
REG_OPENED_EXISTING_KEY 键先前已存在,现在被打开。
・返回值 如果函数调用成功,则返回ERROR_SUCCESS。否则,返回值为文件WINERROR.h中定义的一个非零的错误代码,可以通过设置FORMAT_MESSAGE_FROM_SYSTEM标识调用FormatMessage函数来获取一个对错误的总体描述。
二、 打开一个键RegOpenKeyEx
RegOpenKeyEx函数可以打开一个指定的键,函数原型如下:
LONG RegOpenKeyEx(
HKEY hkey,
LPCTSTR lpSubKey,
DWORD ulOption,
REGSAM samDesired,
PHKEY phkResult
);
各参数及返回值的含义如下:
・参数hKey的含义同RegCreateKeyEx函数中的hKey参数。
・参数lpSubKey为一个指向以零结尾的字符串的指针,其中包含子键的名称,可以利用反斜线(/)分隔不同的子键名。如果字符串为空,则根据hKey参数创建一个新的句柄。在这种情况下,并不关闭先前打开的句柄。
・ulOption保留,通常必须设置为0。
・参数samDesired的含义同RegCreateKeyEx函数中的samDesired参数。
・参数phkResult为一个指针,用来指向打开的键的句柄。可以通过RegCloseKey函数关闭这个句柄。
剩余5页未读,继续阅读
- pyw12092012-11-26一般的操作吧,好像比较老了,编译会报错……
- lzxiaobao2014-11-24很好不错,使 我学会了对注册表的查询、枚举等操作。
- 粉丝: 1
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助