C++ 修改注册表的方法

C++编程 专栏收录该内容
8 篇文章 0 订阅

这几天开始学习winCE,需要修改注册表来实现设备的禁用,因此研究了一下注册表的查询和修改!
网上有这样的程序可以参考,但不是很完整,所以在编程的过程中也出现了一些错误:

如在设置键值时,返回错误值5,出错原因是“没有修改权限”,即在打开注册表时没有正确指定操作权

限KEY_READ|KEY_WRITE。

 

由于参考了别人的代码,所以本文并非全部原创!

下面是MFC程序的源代码:

 

void CRegTableDlg::OnInquire() 
{
	HKEY hKEY; //定义有关的 hKEY, 在查询结束时要关闭。 
	LPCTSTR data_Set="Software\\Microsoft\\Windows\\CurrentVersion\\Winlogon\\"; 
	//打开与路径 data_Set 相关的 hKEY,第一个参数为根键名称,第二个参数表。 
	//表示要访问的键的位置,第三个参数必须为0,KEY_READ表示以查询的方式。 
	//访问注册表,hKEY则保存此函数所打开的键的句柄。 
	long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set, 0, KEY_READ, &hKEY)); 
	if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行 
	{
		MessageBox("错误: 无法打开有关的hKEY!"); 
		return;
	} 

	//查询有关的数据 (用户姓名 owner_Get)。 
	LPBYTE info=new BYTE[80]; 
	DWORD type_1=REG_SZ ; 
	DWORD cbData_1=80; 
	//hKEY为刚才RegOpenKeyEx()函数所打开的键的句柄,"RegisteredOwner"。 
	//表示要查 询的键值名,type_1表示查询数据的类型,owner_Get保存所。 
	//查询的数据,cbData_1表示预设置的数据长度。 
	long ret1=::RegQueryValueEx(hKEY, "LegalNoticeCaption", NULL, 
	&type_1, info, &cbData_1); 
	if(ret1!=ERROR_SUCCESS) 
	{ 
		MessageBox("错误1: 无法查询有关注册表信息!"); 
		return; 
	} 

	UpdateData(TRUE);	
	m_text = CString(info); 		
	UpdateData(FALSE);
	delete[] info; 
	// 程序结束前要关闭已经打开的 hKEY。 
	::RegCloseKey(hKEY); 
}

LPBYTE CString_To_LPBYTE(CString str) 
{ 

	LPBYTE lpb=new BYTE[str.GetLength()];  
	char *pStr=str.GetBuffer(str.GetLength());
	for(int i=0;i<str.GetLength();i++)
		memcpy(lpb+i,pStr+i,1);
	str.ReleaseBuffer();
	return lpb; 
} 

void CRegTableDlg::OnSet() 
{
	// TODO: Add your control notification handler code here
	//修改有关数据(用户姓名 owner_Set),要先将CString型转换为LPBYTE。 
	HKEY hKEY; //定义有关的 hKEY, 在查询结束时要关闭。 
	LPCTSTR data_Set="Software\\Microsoft\\Windows\\CurrentVersion\\Winlogon\\"; 
	//打开与路径 data_Set 相关的 hKEY,第一个参数为根键名称,第二个参数表。 
	//表示要访问的键的位置,第三个参数必须为0,KEY_READ表示以查询的方式。 
	//访问注册表,hKEY则保存此函数所打开的键的句柄。 
	long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set, 0, KEY_READ|KEY_WRITE, &hKEY)); 
	if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行 
	{
		MessageBox("错误: 无法打开有关的hKEY!"); 
		return;
	} 

	UpdateData(TRUE);	
	LPBYTE owner_Set = CString_To_LPBYTE(m_text); 
	UpdateData(FALSE);
	DWORD type_1=REG_SZ; 
	DWORD cbData_1=m_text.GetLength()+1; 
	//与RegQureyValueEx()类似,hKEY表示已打开的键的句柄,"RegisteredOwner" 
	//表示要访问的键值名,owner_Set表示新的键值,type_1和cbData_1表示新值。 
	//的数据类型和数据长度 

	long ret1=::RegSetValueEx(hKEY,"LegalNoticeCaption", 0, 
	type_1, owner_Set,cbData_1); 
	if(ret1!=ERROR_SUCCESS) 
	{ 
		MessageBox("错误: 无法修改有关注册表信息!"); 
		return; 
	} 		
}


我现在注册表中增加了一项,以上为MFC程序的两个按钮对应的函数!另外,其中的m_text变量对应一个编辑框!

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值