MFC 操作注册表
2016-01-13 16:39
501 查看
向注册表中添加值:
先创建键,再添加。
void CDlgLogOn::InitRegInfo()
{
CRegKey key1;
key1.Create(HKEY_CURRENT_USER, "software\\Test\\UserInfo");
key1.Open(HKEY_CURRENT_USER, "software\\Test\\UserInfo");
key1.SetStringValue("admin", "");
key1.Close();
}
获取注册表值:
传入的参数是值名称。如上面的admin。
CString CDlgLogOn::GetKeyValue( CString strKeyName)
{
CString strPwd;
CRegKey key1;
char szRet[MAX_PATH];
memset(szRet, 0, MAX_PATH);
DWORD dwLen = MAX_PATH;
key1.Open(HKEY_CURRENT_USER, "software\\Test\\UserInfo");
if(key1.QueryStringValue(strKeyName, szRet, &dwLen) == ERROR_SUCCESS)
{
strPwd = szRet;
return strPwd;
}
return "123456abcdefg";
}
删除注册表中的值:
void CDlgLogOn::DeleteRegValue(CString val)
{
//删除注册表中的项
CRegKey key1;
key1.Open(HKEY_CURRENT_USER, "software\\Test\\UserInfo");
key1.DeleteValue(val);
key1.Close();
}
遍历某键下面的所有值:
传入值是键值,如上文的 "software\\Test\\UserInfo"
void CDlgLogOn::EnumRegeditKeyVal( CString strKeyName )
{
DWORD wStrSize = 512;
CString strValue;
TCHAR *wStr = new TCHAR[wStrSize];
DWORD dwCountOfSubKey;
DWORD dwCountOfValue;
DWORD dwType;
LONG lResult;
DWORD dwLen = MAX_PATH;
char szRet[MAX_PATH];
memset(szRet, 0, MAX_PATH);
CRegKey regKey;
regKey.Open(HKEY_CURRENT_USER, strKeyName);
lResult = ::RegQueryInfoKey(regKey.m_hKey, NULL, NULL, NULL,
&dwCountOfSubKey, NULL, NULL, &dwCountOfValue, NULL, NULL, NULL, NULL);
if (lResult != ERROR_SUCCESS)
return ;
for (int i = 0; i < dwCountOfValue; ++i)
{
wStrSize = 512;
dwLen = MAX_PATH;
//必须要在循环体内重新设置该值,因为wStrSize每次会被RegEnumValue改变,用来接受下一个wStr
//如果不重新设置,你会发现遍历只能进行一两次
lResult = RegEnumValue(regKey.m_hKey, i, wStr, &wStrSize, NULL, &dwType,NULL, NULL);
if(regKey.QueryStringValue(wStr, szRet, &dwLen) == ERROR_SUCCESS)
{
CString strPwd = szRet;
}
}
delete []wStr;
regKey.Close();
}
先创建键,再添加。
void CDlgLogOn::InitRegInfo()
{
CRegKey key1;
key1.Create(HKEY_CURRENT_USER, "software\\Test\\UserInfo");
key1.Open(HKEY_CURRENT_USER, "software\\Test\\UserInfo");
key1.SetStringValue("admin", "");
key1.Close();
}
获取注册表值:
传入的参数是值名称。如上面的admin。
CString CDlgLogOn::GetKeyValue( CString strKeyName)
{
CString strPwd;
CRegKey key1;
char szRet[MAX_PATH];
memset(szRet, 0, MAX_PATH);
DWORD dwLen = MAX_PATH;
key1.Open(HKEY_CURRENT_USER, "software\\Test\\UserInfo");
if(key1.QueryStringValue(strKeyName, szRet, &dwLen) == ERROR_SUCCESS)
{
strPwd = szRet;
return strPwd;
}
return "123456abcdefg";
}
删除注册表中的值:
void CDlgLogOn::DeleteRegValue(CString val)
{
//删除注册表中的项
CRegKey key1;
key1.Open(HKEY_CURRENT_USER, "software\\Test\\UserInfo");
key1.DeleteValue(val);
key1.Close();
}
遍历某键下面的所有值:
传入值是键值,如上文的 "software\\Test\\UserInfo"
void CDlgLogOn::EnumRegeditKeyVal( CString strKeyName )
{
DWORD wStrSize = 512;
CString strValue;
TCHAR *wStr = new TCHAR[wStrSize];
DWORD dwCountOfSubKey;
DWORD dwCountOfValue;
DWORD dwType;
LONG lResult;
DWORD dwLen = MAX_PATH;
char szRet[MAX_PATH];
memset(szRet, 0, MAX_PATH);
CRegKey regKey;
regKey.Open(HKEY_CURRENT_USER, strKeyName);
lResult = ::RegQueryInfoKey(regKey.m_hKey, NULL, NULL, NULL,
&dwCountOfSubKey, NULL, NULL, &dwCountOfValue, NULL, NULL, NULL, NULL);
if (lResult != ERROR_SUCCESS)
return ;
for (int i = 0; i < dwCountOfValue; ++i)
{
wStrSize = 512;
dwLen = MAX_PATH;
//必须要在循环体内重新设置该值,因为wStrSize每次会被RegEnumValue改变,用来接受下一个wStr
//如果不重新设置,你会发现遍历只能进行一两次
lResult = RegEnumValue(regKey.m_hKey, i, wStr, &wStrSize, NULL, &dwType,NULL, NULL);
if(regKey.QueryStringValue(wStr, szRet, &dwLen) == ERROR_SUCCESS)
{
CString strPwd = szRet;
}
}
delete []wStr;
regKey.Close();
}
相关文章推荐
- 用注册表文件实现解开被锁定的.reg与inf文件
- 注册表导出管理员密码文件
- 修改注册表实现在桌面上显示Windows版本
- 用注册表清除3389登陆记录的方法
- 常见的注册表修改大全第1/3页
- vbscript 注册表脚本书写
- vbscript Registry 注册表操作实现代码(读写删除)
- vbs 注册表操作代码(添加删除)
- 杀毒除根 巧用注册表防止病毒重新生成
- vbs删除注册表项的代码
- 批处理操作注册表完全攻略(读取注册表/写入注册表等)
- 写给电脑初学者的一些建议(注册表篇)
- CMD下读取/修改/删除注册表项的方法
- C#实现读取注册表监控当前操作系统已安装软件变化的方法
- PowerShell使用Remove-Item命令删除文件、注册表项介绍
- C#通过windows注册表获取软件清单的方法
- 读取注册表根据Office版本获取数据库连接字段
- C#操作注册表的方法详解
- 在DOS方式下对注册表进行操作的代码
- Visual C++中MFC消息的分类