注册表操作

Windows定义了一个文件路径的最长长度的常量MAX_PATH(值为260),我们可以用它来建立字符串缓冲区;

CRegKey提供了对系统注册表的操作方法,通过CRegKey类,可以方便的

打开注册表的某个分支或子键 CRegKey::Open

修改一个键的键值                      CRegKey::SetValue

查询某个键的键值                      CRegKey::QueryValue

操作完成之后,关闭子键          CRegKey::Close

要想使用CRegKey类,需要包含头文件atlbase.h

2.常用操作方法

LONG Open( HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired = KEY_ALL_ACCESS );

LONG QueryValue( DWORD& dwValue, LPCTSTR lpszValueName );

LONG QueryValue( LPTSTR szValue, LPCTSTR lpszValueName, DWORD* pdwCount )

LONG SetValue( DWORD dwValue, LPCTSTR lpszValueName );

LONG SetValue( LPCTSTR lpszValue, LPCTSTR lpszValueName = NULL );

LONG SetValue( HKEY hKeyParent, LPCTSTR lpszKeyName, LPCTSTR lpszValue, LPCTSTRlpszValueName = NULL );

LONG DeleteValue( LPCTSTR lpszValue );

 LONG Create( HKEY hKeyParent, LPCTSTR lpszKeyName, LPTSTR lpszClass = REG_NONE, DWORDdwOptions = REG_OPTION_NON_VOLATILE, REGSAMsamDesired = KEY_ALL_ACCESS, LPSECURITY_ATTRIBUTESlpSecAttr = NULL, LPDWORDlpdwDisposition = NULL );

LONG DeleteSubKey( LPCTSTR lpszSubKey );

LONG Close( );

LONG RegFlushKey( HKEY hKey );

3、常见应用

获取系统注册用户名(系统安装时名称)

void CSystemInfoDlg::OnBtnRegName() 
{
	// TODO: Add your control notification handler code here
	CString strPath="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
	//注册表子键路径

	CRegKey regKey;//定义注册表类对象
	LONG lResult;//LONG型变量——反应结果
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);//读取键值成功返回ERROR_SUCCESS
	//打开注册表主键
	if (lResult!=ERROR_SUCCESS)//读取键值不成功
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chRegisteredName[30];
	DWORD dwSize=30;
	regKey.QueryValue(chRegisteredName,"RegisteredOwner",&dwSize);
	//获取RegisteredOwner的值
	m_strRegOwner=chRegisteredName;
	UpdateData(FALSE);
	regKey.Close();//关闭注册表
	
}


 

LONG QueryValue( LPTSTR szValue, LPCTSTR lpszValueName, DWORD* pdwCount )

szValue:字符串数据类型的键值

lpszValueName:所读取键值项的名称

pdwCount:字符串大小

成功读取注册表中某键值项的键值,成功返回ERROR_SUCCESS;失败返回错误值

注意第三个参数,为存储该键值的大小,应根据实际情况设定比较合理的空间,这里为30个字符。

获取系统注册用户名

获取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion子键中获取RegisteredOwner的键值。

 

获取注册单位名

void CSystemInfoDlg::OnButton1() 
{

	CRegKey regKey;
	CString strPath="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);

	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chRegisteredName[30];
	DWORD dwSize=30;
	regKey.QueryValue(chRegisteredName,"RegisteredOrganization",&dwSize);
	//获取RegisteredOwner的值
	m_strRegisteredOrganization=chRegisteredName;
	UpdateData(FALSE);
	regKey.Close();//关闭注册表
}


 

获取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion子键中获取RegisteredOrganization的键值。

获取操作系统安装序列号

获取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion子键中获取ProductName的键值。

 

void CSystemInfoDlg::OnButton4() 
{
	CString strPath="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chProductName[50];
	DWORD dwSize=50;
	regKey.QueryValue(chProductName,"ProductName",&dwSize);
	m_strProductName=chProductName;
	UpdateData(FALSE);
	regKey.Close();
}


 

获取IE版本号

获取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer子键中获取Version的键值。

 

 

void CSystemInfoDlg::OnButton5() 
{
	
	CString strPath="SOFTWARE\\Microsoft\\Internet Explorer";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chIEVersion[50];
	DWORD dwSize=50;
	regKey.QueryValue(chIEVersion,"Version",&dwSize);
	m_strIEVersion=chIEVersion;
	UpdateData(FALSE);
	regKey.Close();
}


获取Windows的版本号

获取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion子键中获取CurrentVersion的键值。

 

void CSystemInfoDlg::OnButton6() 
{
	CString strPath="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chCurrentVersion[50];
	DWORD dwSize=50;
	regKey.QueryValue(chCurrentVersion,"CurrentVersion",&dwSize);
	m_strCurrentVersion=chCurrentVersion;
	UpdateData(FALSE);
	regKey.Close();
	
}


通过GetVersionEx()函数可以得到OSVERSIONINFO数据结构,该结构中的dwMajorVersion与dwMinorVersion即是版本号(主副版本号)

 

获取Windows内建号

void CSystemInfoDlg::OnButtonBuildNumber() 
{
	CString strPath="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chCurrentBuildNumber[50];
	DWORD dwSize=50;
	regKey.QueryValue(chCurrentBuildNumber,"CurrentBuildNumber",&dwSize);
	m_strBuildNo=chCurrentBuildNumber;
	UpdateData(FALSE);
	regKey.Close();
	
}


获取Windows的版本名称

void CSystemInfoDlg::OnBtnCsdVersion() 
{
	CString strPath="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chCSDVersion[50];
	DWORD dwSize=50;
	regKey.QueryValue(chCSDVersion,"CSDVersion",&dwSize);
	m_strCSDVersion=chCSDVersion;
	UpdateData(FALSE);
	regKey.Close();
	
}


通过GetVersionEx()函数可以得到OSVERSIONINFO数据结构,该结构中的CSDVersion即是Windows的版本名称

获取桌面文件夹的位置

获取HKEY_CURRENT_USER\software\Microsoft\Windows\Explorer\Shell Folders子键中获取Desktop的键值。

 

void CSystemInfoDlg::OnButton9() 
{
	CString strPath="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_CURRENT_USER,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chDesktop[50];
	DWORD dwSize=50;
	regKey.QueryValue(chDesktop,"Desktop",&dwSize);
	m_strDesktopDir=chDesktop;
	UpdateData(FALSE);
	regKey.Close();
	
}


 

获取字体文件夹的位置

获取HKEY_CURRENT_USER\software\Microsoft\Windows\Explorer\Shell Folders子键中获取Fonts的键值。

void CSystemInfoDlg::OnButtonFont() 
{
	CString strPath="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_CURRENT_USER,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chFonts[50];
	DWORD dwSize=50;
	regKey.QueryValue(chFonts,"Fonts",&dwSize);
	m_strFonts=chFonts;
	UpdateData(FALSE);
	regKey.Close();
}

获取网上邻居文件夹的位置

获取HKEY_CURRENT_USER\software\Microsoft\Windows\Explorer\Shell Folders子键中获取NetHood的键值。

void CSystemInfoDlg::OnButton8() 
{
	CString strPath="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_CURRENT_USER,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chNetHood[50];
	DWORD dwSize=50;
	regKey.QueryValue(chNetHood,"NetHood",&dwSize);
	m_strNetHood=chNetHood;
	UpdateData(FALSE);
	regKey.Close();
	
}


 

获取“我的文档”文件夹的位置

获取HKEY_CURRENT_USER\software\Microsoft\Windows\Explorer\Shell Folders子键中获取Personal的键值。

 

void CSystemInfoDlg::OnButton10() 
{
	CString strPath="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
	CRegKey regKey;
	LONG lResult;
	lResult=regKey.Open(HKEY_CURRENT_USER,LPCTSTR(strPath),KEY_ALL_ACCESS);
	if (lResult!=ERROR_SUCCESS)
	{
		AfxMessageBox("错误:无法查询有关的注册表信息");
		return;
	}
	char chMyDoc[50];
	DWORD dwSize=50;
	regKey.QueryValue(chMyDoc,"Personal",&dwSize);
	m_strPersonal=chMyDoc;
	UpdateData(FALSE);
	regKey.Close();
	
	
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值