操作注册表的实现
一般操作注册表的方法
注册表内部结构:
key->subkey->value->名称,类型,数据
函数:
RegCreateKey()
RegCreateKeyEx()
RegOpenKey()
RegOpenKeyEx()
RegSetValue()
RegSetValueEx()
RegQueryValue()
RegQueryValueEx()
RegDeleteKey()
RegDeleteKeyEx()
RegCloseKey()
1.写注册表操作
有些系统需要管理员才能对注册表进行修改,所以想要程序运行成功必须要以管理员身份运行,否则将写入失败
HKEY hKey = nullptr;
//创建成功,将得到hKey,一个注册表句柄,用于下面操作注册表
if (ERROR_SUCCESS != RegCreateKey(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Test"), &hKey))
{
AfxMessageBox(TEXT("创建注册表失败!"));
return;
}
//写入注册表 //类型 //名称 //字符个数
//只能写入一个value
if (ERROR_SUCCESS != RegSetValue(hKey,nullptr,REG_SZ,TEXT("Test"),4))
{
AfxMessageBox(TEXT("写入注册表失败!"));
return;
}
if (hKey ==nullptr)
{
return;
}
DWORD dwData = 100;
LONG lRet = 0;
//这个函数可以写入更多的Value //名称 //类型 //数据
if (ERROR_SUCCESS != (lRet = RegSetValueEx(hKey, TEXT("other"), 0, REG_DWORD, (CONST BYTE*)&dwData, 4)))
{
AfxMessageBox(TEXT("写入注册表失败Ex!"));
return;
}
AfxMessageBox(TEXT("写入注册表成功!"));
RegCloseKey(hKey);
2.读注册表操作
LONG lValue = 0;
//先读取数据的长度
RegQueryValue(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Test"), nullptr, &lValue);
TCHAR *pBuf = new TCHAR[lValue];
RegQueryValue(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Test"), pBuf, &lValue);
AfxMessageBox(pBuf);
HKEY hKey = nullptr;
DWORD dwTpye = 0;
DWORD dwValue = sizeof(DWORD);//这个大小一定要先求出来,否则会出错(234)
LPDWORD dwData = new DWORD;//一定要分配内存,否则也会出错
LONG lRet = 0;
//打开注册表
RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Test"),0, KEY_ALL_ACCESS,&hKey);
//RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Test"), &hKey);
//读注册表 //valuename //返回value类型 //数据缓存区 //缓存区大小
if (ERROR_SUCCESS != (lRet = RegQueryValueEx(hKey, TEXT("other"), 0, &dwTpye, (LPBYTE)dwData, &dwValue)))
{
AfxMessageBox(TEXT("读取注册表失败!"));
return;
}
AfxMessageBox(TEXT("读取注册表成功!"));
CString s;
s.Format(TEXT("data = %d"), *dwData);
AfxMessageBox(s);
delete dwData;
RegQueryValueEx这个函数根据不同的REG类型有不同的用法,需要谨慎小心。