打开注册表键
HKEY phkResult=NULL;
LONG L = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\lm"), 0, KEY_WOW64_64KEY | KEY_READ, &phkResult);//打开注册表键
/*
参数1:HKEY hKey 需要打开的主键的名称
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG
参数2:LPCTSTR lpSubKey 需要打开的子键的名称
以null结尾的字符串指针,包含要打开的注册表子项的名称。如果参数设置为NULL 或者指向一个空字符串,该函数将打开由hKey参数标识的键的新句柄。这种情况下,函数不会关闭先前已经打开的句柄
注意:\\
参数3:DWORD ulOptions 保留,设为0
参数4:REGSAM samDesired 安全访问标记,也就是权限
KEY_ALL_ACCESS=0xF003F 包含所有权限
参数5:PHKEY phkResult 保存打开键的句柄
指向一个接收到打开的键的句柄的变量的指针。当您不再需要返回的句柄时,调用RegCloseKey函数来关闭它
返回值:如果函数调用成功,则返回0(ERROR_SUCCESS)。否则,返回值为文件WINERROR.h中定义的一个非零的错误代码
错误代码可以通过 菜单栏-->工具-->错误查找 查看发生错误的原因
*/
if (L== ERROR_SUCCESS)
{
AfxMessageBox(_T("打开成功"));
}
注意容易发生的错误:
64位机制 x86环境下 必须用KEY_WOW64_64KEY
错误代码查询:
菜单栏-->工具--> 错误查找
释放注册键句柄
LONG LL = ::RegCloseKey(phkResult); //释放注册键句柄
//参数:HKEY hKey 释放键的句柄
//返回值: 如果过程执行成功,返回值是 ERROR_SUCCESS。如果功能失败,返回一个非零值,错误码在 Winerror.h 定义
创建或打开子键
HKEY phkResult = NULL;
DWORD lpdw;
LONG L = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\lm"), 0, KEY_ALL_ACCESS, &phkResult);
LONG LL=RegCreateKeyEx(phkResult,_T("liming"),0,NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS,NULL, &phkResult, &lpdw);//创建或打开子键
/*
如果新键不存在就创建,如果新键已经存在就打开, [可以创建n深层的子键]
参数1:HKEY 一个打开键的句柄。调用该函数的进程必须拥有KEY_CREATE_SUB_KEY的权力。该句柄可以是RegCreateKeyEx或者RegOpenKeyEx的返回值,也可以是以下预定义的值
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
参数2:标识子键名称。该参数不能为空。参数中不能存在(/)
参数3:保留值,必须为0
参数4:指向一个字符串,该字符串定义了该键的类型
参数5: REG_OPTION_NON_VOLATILE
REG_OPTION_VOLATILE 一般使用该值(保存新键)
REG_OPTION_BACKUP_RESTORE
参数6:指定对密钥的期望访问权限
[看上面]
参数7:一个SECURITY_ATTRIBUTES结构的指针,该结构确定返回的句柄是否可以被子进程继承。如果为NULL,则不能继承该句柄
参数8:PHKEY 保存返回的句柄
参数9:LPDWORD 保存新键之前是否存在;可以为NULL
REG_CREATED_NEW_KEY=0x00000001L 该键是新创建的键
REG_OPENED_EXISTING_KEY=0x00000002L 该键是已经存在的键
返回值:如果函数成功,返回值为ERROR_SUCCESS。如果函数失败,返回值是Winerror.h中定义的非零错误代码
*/
if(LL== ERROR_SUCCESS)
{
CString str;
str.Format(_T("LL=%d"),LL);
::OutputDebugString(str);
}
删除注册表键
HKEY phkResult = NULL;
LONG L = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\lm"), 0, KEY_ALL_ACCESS, &phkResult);
LONG LL=RegDeleteKey(phkResult, _T("liming")); //删除注册表键
/*
参数1:HKEY 键的句柄
可以使用下列的常量:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
参数2:LPCTSTR 被删除的键名称
键值的名称不区分大小写
返回值:如果函数成功,返回值是ERROR_SUCCESS。如果函数失败,返回值是非零错误代码定义在 Winerror.h
说明:函数仅删除最后一层子键以及下面的全部键值项
*/
RegQueryInfoKey获取键的信息
HKEY phkResult = NULL;
DWORD num = 100;
DWORD len = 0;
DWORD num1 = 0;
DWORD mingcen = 0;
DWORD suju = 0;
LONG L = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\lm"), 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS, &phkResult);
L=RegQueryInfoKey(phkResult, NULL, NULL,NULL,&num,&len,NULL,&num1,&mingcen,&suju, NULL,NULL);//获取键的信息
/*
参数1:HKEY 打开的注册表项的句柄。 密钥必须已使用KEY_QUERY_VALUE访问权限打开
参数2:LPWSTR,指定一个字串,用于装载这个注册表项的类名,一般为NULL
参数3:LPDWORD,指定一个变量,用于装载参数2缓冲区的长度。一旦返回,它会设为实际装载到缓冲区的字节数量,一般为NULL
参数4:LPDWORD,未用,设为NULL
参数5:LPDWORD,用于保存直接子键数量的一个变量
参数6:LPDWORD,指定一个变量,用于装载这个项最长一个子键的长度。注意这个长度不包括空中止字符
参数7:LPDWORD,指定一个变量,用于装载这个项之子键的最长一个类名的长度。注意这个长度不包括空中止字符,一般为NULL
参数8:LPDWORD,用于保存键值的数量(不包括默认),可以为NULL
参数9:LPDWORD,指定一个变量,用于保存这个项之子键的最长一个键值名称的长度。注意这个长度不包括空中止字符,可以为NULL
参数10:LPDWORD,指定一个变量,用于保存这个项最长一个键值数据长度
参数11:LPDWORD,保存安全描述符长度的一个变量,一般为NULL
参数12:FILETIME,指定一个结构,用于保存该项的上一次修改时间,可以为NULL
返回值:Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码。
如一个缓冲区的长度不够,不能容下返回的数据,则函数会返回ERROR_MORE_DATA
*/