使用的API
| Windows API | 简述 |
|---|---|
| RegOpenKeyEx | 打开注册表的key |
| RegQueryValueEx | 读取注册表某个key的值 |
| RegCreateKeyEx | 打开或创建注册表项 |
| RegSetValueEx | 向注册表中某个Key写入值 |
读取注册表中的某个Key
使用RegOpenKeyEx和RegQueryValueEx
代码
void CMFCApplication1Dlg::OnBnClickedButton1()
{
long lRet;
HKEY hKey; // 句柄
TCHAR tchData[64]; // 保存读取到的数据
DWORD dwSize; // 大小
// 打开注册表的Key
lRet = RegOpenKeyEx(
HKEY_LOCAL_MACHINE, // 注册表Key
_T("Hardware\\Description\\System\\CentralProcessor\\0"), // 注册表子Key
0,
KEY_QUERY_VALUE, // 读取Value
&hKey // 打开之后得到一个句柄
);
dwSize = sizeof(tchData);
if (lRet == ERROR_SUCCESS)
{
// 成功
// 读取注册表某个key的值
lRet = RegQueryValueEx(
hKey,
_T("ProcessorNameString"), // 读取ProcessorNameString这个键的值
NULL,
NULL,
(LPBYTE)tchData, // 数组
&dwSize // 大小
);
if (lRet == ERROR_SUCCESS)
{
// 成功
SetDlgItemText(IDC_STATIC, tchData);
} else
{
// 失败
AfxMessageBox(_T("RegQueryValueEx failed."));
}
} else
{
// 失败
AfxMessageBox(_T("RegOpenKeyEx failed."));
}
// 关闭打开的Key
RegCloseKey(hKey);
}
运行效果
往注册表中写入数据
使用RegCreateKeyEx和RegSetValueEx
代码
void CMFCApplication1Dlg::OnBnClickedButton2()
{
HKEY hKey;
// 创建Key
DWORD disposition; // 用于接收操作结果信息
// 打开或创建注册表项 HKEY_CURRENT_USER\Software\MyApp
LONG result = RegCreateKeyEx(
HKEY_CURRENT_USER,
TEXT("Software\\MyApp"),
0,
NULL,
REG_OPTION_NON_VOLATILE, // 表示注册表项将在系统重启后保留
KEY_WRITE,
NULL,
&hKey,
&disposition
);
// 向注册表中某个Key写入值
if (result == ERROR_SUCCESS) {
if (disposition == REG_CREATED_NEW_KEY) {
AfxMessageBox(_T("Registry key created.\n"));
const WCHAR* valueName = TEXT("MyValue");
LPCTSTR valueData = _T("Hello, Registry!");
// 设置字符串值
result = RegSetValueEx(
hKey,
valueName,
0,
REG_SZ,
(BYTE*)valueData,
(lstrlen(valueData) + 1) * sizeof(TCHAR) // 包括 null 终止符的大小
);
if (result == ERROR_SUCCESS) {
AfxMessageBox(_T("Registry value set successfully.\n"));
}
else {
AfxMessageBox(_T("Failed to set registry value."));
}
}
else if (disposition == REG_OPENED_EXISTING_KEY) {
AfxMessageBox(_T("Registry key opened.\n"));
}
}
else {
AfxMessageBox(_T("Failed to open or create registry key.\n"));
}
RegCloseKey(hKey);
}