注册表操作

来源:互联网 发布:苹果手机快手软件 编辑:程序博客网 时间:2024/05/12 20:43

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 hereCString 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();}

原创粉丝点击