[C++]用VC++来设置获得注册表的键值(问题解决)
2012-02-12 14:59
405 查看
下面这个是基于MFC的基本对话写的。。 演示设置注册表的3中类型的值和获得注册表的3中类型的值。。 分别用RegSetValueEx()来设置,RegQueryValueEx()函数来获得。
void CUserRegDlg::OnOK()
{
// TODO: Add extra validation here
CString str = "hello reg";
DWORD regd = 100;
BYTE bValues[] = { 0x11, 0x12, 0x55 };
BYTE Vals[100];
DWORD lenIt = 100;
HKEY hk;
// 打开注册表如果没有则创建, 返回注册表句柄于hk
if ( ::RegCreateKey( HKEY_LOCAL_MACHINE, "SOFTWARE\\Test\\", &hk ) == ERROR_SUCCESS )
{
AfxMessageBox( "打开注册表" );
}
// 保存参数到注册表
try
{
/*
RegSetValueEx( 根键句柄, 值项名称, 保留参数补0即可, 数据类型, 所设置的数据, 数据长度 )
用来设置注册表键特定的值,如果数据不存在则创建它
*/
/* 保存字符值到注册表 */
if ( ::RegSetValueEx( hk, "Server", 0, REG_SZ, (LPBYTE)(LPCSTR)str, str.GetLength( ) +1 ) == ERROR_SUCCESS )
{
AfxMessageBox( "字符值参数保存成功" );
}
/* 保存双字节到注册表 */
if ( ::RegSetValueEx( hk, "part", 0, REG_DWORD, (BYTE*)®d, sizeof( regd ) ) == ERROR_SUCCESS )
{
AfxMessageBox( "双字节参数保存成功" );
}
/* 保存二进制到注册表 */
if ( ::RegSetValueEx( hk, "id", 0, REG_BINARY, bValues, 3) == ERROR_SUCCESS )
{
AfxMessageBox( "二进制参数保存成功" );
}
/*
RegQueryValueEx( 根键句柄, 值项名称, 保留参数补0即可, 返回值的数据类型(可为NULL), 返回
读取的数据, 返回读取数据的长度 )
用来返回注册表键的特定名称的值
/*
/* 获得字符值 */
if ( ::RegQueryValueEx( hk, "Server", 0, NULL, (BYTE*)Vals, &lenIt ) == ERROR_SUCCESS )
{
AfxMessageBox( (CString)Vals );
}
/* 获得双字节值 */
if ( ::RegQueryValueEx( hk, "part", 0, NULL, (BYTE*)Vals, &lenIt ) == ERROR_SUCCESS )
{
AfxMessageBox( (CString)Vals );
}
/* 获得二进制值 */
if ( ::RegQueryValueEx( hk, "id", 0, NULL, (BYTE*)Vals, &lenIt ) == ERROR_SUCCESS )
{
AfxMessageBox( (CString)Vals );
}
// 关闭注册表
::RegCloseKey( hk );
}
catch(...)
{
return;
}
// CDialog::OnOK();
}
void CUserRegDlg::OnOK()
{
// TODO: Add extra validation here
CString str = "hello reg";
DWORD regd = 100;
BYTE bValues[] = { 0x11, 0x12, 0x55 };
BYTE Vals[100];
DWORD lenIt = 100;
HKEY hk;
// 打开注册表如果没有则创建, 返回注册表句柄于hk
if ( ::RegCreateKey( HKEY_LOCAL_MACHINE, "SOFTWARE\\Test\\", &hk ) == ERROR_SUCCESS )
{
AfxMessageBox( "打开注册表" );
}
// 保存参数到注册表
try
{
/*
RegSetValueEx( 根键句柄, 值项名称, 保留参数补0即可, 数据类型, 所设置的数据, 数据长度 )
用来设置注册表键特定的值,如果数据不存在则创建它
*/
/* 保存字符值到注册表 */
if ( ::RegSetValueEx( hk, "Server", 0, REG_SZ, (LPBYTE)(LPCSTR)str, str.GetLength( ) +1 ) == ERROR_SUCCESS )
{
AfxMessageBox( "字符值参数保存成功" );
}
/* 保存双字节到注册表 */
if ( ::RegSetValueEx( hk, "part", 0, REG_DWORD, (BYTE*)®d, sizeof( regd ) ) == ERROR_SUCCESS )
{
AfxMessageBox( "双字节参数保存成功" );
}
/* 保存二进制到注册表 */
if ( ::RegSetValueEx( hk, "id", 0, REG_BINARY, bValues, 3) == ERROR_SUCCESS )
{
AfxMessageBox( "二进制参数保存成功" );
}
/*
RegQueryValueEx( 根键句柄, 值项名称, 保留参数补0即可, 返回值的数据类型(可为NULL), 返回
读取的数据, 返回读取数据的长度 )
用来返回注册表键的特定名称的值
/*
/* 获得字符值 */
if ( ::RegQueryValueEx( hk, "Server", 0, NULL, (BYTE*)Vals, &lenIt ) == ERROR_SUCCESS )
{
AfxMessageBox( (CString)Vals );
}
/* 获得双字节值 */
if ( ::RegQueryValueEx( hk, "part", 0, NULL, (BYTE*)Vals, &lenIt ) == ERROR_SUCCESS )
{
AfxMessageBox( (CString)Vals );
}
/* 获得二进制值 */
if ( ::RegQueryValueEx( hk, "id", 0, NULL, (BYTE*)Vals, &lenIt ) == ERROR_SUCCESS )
{
AfxMessageBox( (CString)Vals );
}
// 关闭注册表
::RegCloseKey( hk );
}
catch(...)
{
return;
}
// CDialog::OnOK();
}
相关文章推荐
- 用VC++来设置获得注册表的键值
- VC问题 IntelliSense:“没有可用的附加信息”,[请参见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]
- 通过注册表修改VC6.0的字体(可以解决在字体设置里面没有可选字体的问题)
- 解决VS2010(VC10)包含路径设置问题
- 关于C++(VC2005)编译多一条JMP指令的问题,待解决
- 【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题
- 解决Visual C++ for Linux: -L"~/projects/path_to_lib_folder" 无法设置library search path的问题
- c++中关于设置左对齐和右对齐的问题解决方法
- C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- 用VS2010编写的C++程序,在其他电脑上无法运行,提示缺少mfc100.dll的解决办法 vc链接静态库的时候要注意的问题
- 关于C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- 彻底解决兼容问题Windows_7安装_Visual_C++_6.0(VC6)
- 通过注册表修改VC6.0的字体(可以解决在字体设置里面没有可选字体的问题)
- VC问题 IntelliSense:“没有可用的附加信息”,[请参见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]
- win7 64位注册表操作兼容问题解决(vc6)
- VC 无法设置断点问题-好的解决办法
- 我的Elicpse C++IDE问题解决设置
- 【C++builder delphi project rule not found 解决方法 】【注册表 DeleteKey 失效 问题】
- VC问题 IntelliSense:“没有可用的附加信息”,[请参见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]
- 完美解决WIN7系统字体模糊问题(替换字体+更改样式设置+修改注册表)