注册表是Windows中存储一些软件或者系统的配置信息的一个树形表格,一般当自己写的软件需要一些固定或者下次启动时需要的配置信息的时候,就需要使用到注册表。注册表的结构为Key -> subKey -> value -> 名称、类型、数据。一般注册标的子健有好多节点。
C++使用注册表主要有一下几个函数:
- RegCreateKey()创建或打开注册表项。默认为创建,当注册表中有此项时。为打开。[Long]
0(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码.。 - RegSetValue()给注册表写入值
- RegOpenKey()打开给定键
- RegQueryValue()取得指定项或子项的默认(未命名)值。返回值【Long】
0(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码 - RegDeleteKey()是用来删除一个注册表键值,在计算机注册列表里能找到。返回值【Long】
0(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码。 - RegCloseKey()释放指定注册键的句柄。返回值【Long】
0(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码。 - RegCreateKeyEx()创建指定的注册键。如果这个键已经存在,这个函数会打开它。注意:键的名字大小写不敏感。
- RegOpenKeyEx()是计算机用语,用于打开一个指定的注册表键。
- RegSetValueEx ()向指定的注册键写入数值
- RegQueryValueEx()检索一个已打开的注册表句柄中,指定的注册表键的类型和设置值。返回值Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码
- RegDeleteKeyEx()是用来删除一个指定的注册键,在计算机注册列表里能找到。返回值【Long】
0(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码。
例子:
1、以获取CPU的芯片信息为例读取注册表
a、使用RegOpenKeyEx打开注册表
b、使用RegQueryValueEx获取注册表中的信息
c、使用RegCloseKey(hKey);关闭注册表
//获取之策表中电脑CPU的信息
void C注册表Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
long lRet;
HKEY hKey;
TCHAR tchData[64];
DWORD dwSize;
CString path = _T("HARDWARE\\DESCRIPION\\System\\CentralProcessor\\0");
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"),
0,
KEY_QUERY_VALUE,
&hKey);//打开注册表
if (lRet == ERROR_SUCCESS)
{
lRet = RegQueryValueEx(hKey, _T("ProcessorNameString"),NULL,NULL,(LPBYTE)tchData,&dwSize);//获取注册表的信息
if (lRet == ERROR_SUCCESS)
{
SetDlgItemText(IDC_STATIC_CPU,tchData);
}
else
{
AfxMessageBox(_T("REgQueryValueEx failed"));
}
}
else
{
AfxMessageBox(_T("RegOpenKey failed"));
}
RegCloseKey(hKey);
}
2、向注册表中写入数值
a、使用RegCreateKey创建注册表
b、使用RegSetValue向注册表中写入数值
c、关闭注册表
void C注册表Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
HKEY hKey;
long lRet;
lRet = RegCreateKey(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\hhhhh"), &hKey);//创建新的注册表
RegSetValue(hKey,NULL,REG_SZ,_T("LieBao"),6);
DWORD dwAge = 30;
RegSetValueEx(hKey,_T("age"),0,REG_DWORD,(CONST BYTE*)&dwAge,4);
RegCloseKey(hKey);
}
3、获取注册表中有建值的信息
void C注册表Dlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
HKEY hKey;
RegOpenKey(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\hhhhh") ,&hKey);
DWORD dwType;
DWORD dwValue;
DWORD dwAge;
RegQueryValueEx(hKey,_T("age"),0,&dwType,(LPBYTE)&dwAge,&dwValue);
CString str;
str.Format(_T("age = %d"),dwAge);
AfxMessageBox(str);
}
4、获取注册表中没有建值的信息
void C注册表Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
LONG lValue;
RegQueryValue(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\hhhhh"), NULL,&lValue);
TCHAR *pBuf = new TCHAR[lValue];
RegQueryValue(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\hhhhh"), pBuf, &lValue);
AfxMessageBox(pBuf);
}