VisualC++利用CRegKey和WIN32 API获取系统硬件信息

转自: http://blog.csdn.net/archielau/article/details/7828631


获取CPU名称、标识、制造商名称、主频、个数、显卡BIOS与系统BIOS版本号和更新日期源程序链接
 
LONG QueryValue( LPTSTR szValue, LPCTSTR
lpszValueName, DWORD*
pdwCount )
szValue:字符串数据类型的键值
lpszValueName:所读取键值项的名称
pdwCount:字符串大小
成功读取注册表中某键值项的键值,成功返回ERROR_SUCCESS;失败返回错误值
注意第三个参数,为存储该键值的大小,应根据实际情况设定比较合理的空间,这里为30个字符。
 
 
LONG QueryValue( DWORD& dwValue, LPCTSTR lpszValueName)
dwValue:DWORD数据类型的键值
lpszValueName:所读取键值项的名称
pdwCount:字符串大小
成功读取注册表中某键值项的键值,成功返回ERROR_SUCCESS;失败返回错误值
 
获取CPU名称
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取ProcessorNameString的键值。该注册表子键存储了当前计算机的处理器信息,如CPU名称、标识和厂商等。
[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton1()   {      CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";      CRegKey regKey;      LONG lResult;      lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);        //打开注册表主键         if (lResult!=ERROR_SUCCESS)//读取键值不成功         {            AfxMessageBox("错误:无法查询有关的注册表信息");            return;        }        char chCPUName[50];        DWORD dwSize=50;        regKey.QueryValue(chCPUName,"ProcessorNameString",&dwSize);        //获取RegisteredOwner的值         m_strCPUName=chCPUName;        UpdateData(FALSE);        regKey.Close();//关闭注册表        }  void CSystemHardwareInfoDlg::OnButton1()
{
 CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
 CRegKey regKey;
 LONG lResult;
 lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);

    //打开注册表主键  
    if (lResult!=ERROR_SUCCESS)//读取键值不成功  
    { 
        AfxMessageBox("错误:无法查询有关的注册表信息"); 
        return; 
    } 
    char chCPUName[50]; 
    DWORD dwSize=50; 
    regKey.QueryValue(chCPUName,"ProcessorNameString",&dwSize); 
    //获取RegisteredOwner的值  
    m_strCPUName=chCPUName; 
    UpdateData(FALSE); 
    regKey.Close();//关闭注册表
 
}
获取CPU标识
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取Identifier的键值。
[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton2()   {      CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";      CRegKey regKey;      LONG lResult;      lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);            //打开注册表主键         if (lResult!=ERROR_SUCCESS)//读取键值不成功         {            AfxMessageBox("错误:无法查询有关的注册表信息");            return;        }        char chCPUID[50];        DWORD dwSize=50;        regKey.QueryValue(chCPUID,"Identifier",&dwSize);        //获取RegisteredOwner的值         m_strCPUIdentifier=chCPUID;        UpdateData(FALSE);        regKey.Close();//关闭注册表        }  void CSystemHardwareInfoDlg::OnButton2()
{
 CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
 CRegKey regKey;
 LONG lResult;
 lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
 
    //打开注册表主键  
    if (lResult!=ERROR_SUCCESS)//读取键值不成功  
    { 
        AfxMessageBox("错误:无法查询有关的注册表信息"); 
        return; 
    } 
    char chCPUID[50]; 
    DWORD dwSize=50; 
    regKey.QueryValue(chCPUID,"Identifier",&dwSize); 
    //获取RegisteredOwner的值  
    m_strCPUIdentifier=chCPUID; 
    UpdateData(FALSE); 
    regKey.Close();//关闭注册表
 
}
获取CPU制造商名称
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取VendorIdentifier的键值。

[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton3()   {      CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";      CRegKey regKey;      LONG lResult;      lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);            //打开注册表主键         if (lResult!=ERROR_SUCCESS)//读取键值不成功         {            AfxMessageBox("错误:无法查询有关的注册表信息");            return;        }        char chVendor[50];        DWORD dwSize=50;        regKey.QueryValue(chVendor,"VendorIdentifier",&dwSize);        //获取RegisteredOwner的值         m_strVendorID=chVendor;        UpdateData(FALSE);        regKey.Close();//关闭注册表        }  void CSystemHardwareInfoDlg::OnButton3()
{
 CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
 CRegKey regKey;
 LONG lResult;
 lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
 
    //打开注册表主键  
    if (lResult!=ERROR_SUCCESS)//读取键值不成功  
    { 
        AfxMessageBox("错误:无法查询有关的注册表信息"); 
        return; 
    } 
    char chVendor[50]; 
    DWORD dwSize=50; 
    regKey.QueryValue(chVendor,"VendorIdentifier",&dwSize); 
    //获取RegisteredOwner的值  
    m_strVendorID=chVendor; 
    UpdateData(FALSE); 
    regKey.Close();//关闭注册表
 
}
获取CPU主频
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取~MHz的键值。注意为DWORD类型。
[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton4()   {      CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";      CRegKey regKey;      LONG lResult;      lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);            //打开注册表主键         if (lResult!=ERROR_SUCCESS)//读取键值不成功         {            AfxMessageBox("错误:无法查询有关的注册表信息");            return;        }        DWORD dwMHz;       DWORD dwSize=50;        regKey.QueryValue(dwMHz,"~MHz");        //获取RegisteredOwner的值         m_nMHz=dwMHz;        UpdateData(FALSE);        regKey.Close();//关闭注册表        }  void CSystemHardwareInfoDlg::OnButton4()
{
 CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
 CRegKey regKey;
 LONG lResult;
 lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
 
    //打开注册表主键  
    if (lResult!=ERROR_SUCCESS)//读取键值不成功  
    { 
        AfxMessageBox("错误:无法查询有关的注册表信息"); 
        return; 
    } 
    DWORD dwMHz;
    DWORD dwSize=50; 
    regKey.QueryValue(dwMHz,"~MHz"); 
    //获取RegisteredOwner的值  
    m_nMHz=dwMHz; 
    UpdateData(FALSE); 
    regKey.Close();//关闭注册表
 
}
获取CPU个数
VOID GetSystemInfo(LPSYSTEM_INFO lpSystemInfo)
lpSystemInfo:指向存储当前计算机信息结构的指针
功能:获取当前计算机的信息
[cpp] view plain copy print?//SYSTEM_INFO结构包含有关当前计算机系统的信息。包括处理器类型,页面大小,内存地址,和OEM标识符。     typedef struct _SYSTEM_INFO {    union {    DWORD dwOemId;        OemId过时的,不使用    struct {      WORD wProcessorArchitecture;    处理器架构      WORD wReserved;    };  };    DWORD dwPageSize;        页面大小    LPVOID lpMinimumApplicationAddress;   应用程序最小地址    LPVOID lpMaximumApplicationAddress;   应用程序最大地址    DWORD dwActiveProcessorMask;     处理器掩码    DWORD dwNumberOfProcessors;     处理器数量    DWORD dwProcessorType;      处理器类型    DWORD dwAllocationGranularity;    虚拟内存分配粒度    WORD wProcessorLevel;       处理器级别    WORD wProcessorRevision;      处理器版本  } SYSTEM_INFO, *LPSYSTEM_INFO;  //SYSTEM_INFO结构包含有关当前计算机系统的信息。包括处理器类型,页面大小,内存地址,和OEM标识符。

typedef struct _SYSTEM_INFO {
  union {
  DWORD dwOemId;        OemId过时的,不使用
  struct {
    WORD wProcessorArchitecture;    处理器架构
    WORD wReserved;
  };
};
  DWORD dwPageSize;        页面大小
  LPVOID lpMinimumApplicationAddress;   应用程序最小地址
  LPVOID lpMaximumApplicationAddress;   应用程序最大地址
  DWORD dwActiveProcessorMask;     处理器掩码
  DWORD dwNumberOfProcessors;     处理器数量
  DWORD dwProcessorType;      处理器类型
  DWORD dwAllocationGranularity;    虚拟内存分配粒度
  WORD wProcessorLevel;       处理器级别
  WORD wProcessorRevision;      处理器版本
} SYSTEM_INFO, *LPSYSTEM_INFO;


 
[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton5()   {        SYSTEM_INFO sysInfo;      GetSystemInfo(&sysInfo);      m_dwNum=sysInfo.dwNumberOfProcessors;      UpdateData(FALSE);  }  void CSystemHardwareInfoDlg::OnButton5()
{

 SYSTEM_INFO sysInfo;
 GetSystemInfo(&sysInfo);
 m_dwNum=sysInfo.dwNumberOfProcessors;
 UpdateData(FALSE);
}


 
获取显卡BIOS版本号
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System子键中获取VideoBiosVersion的键值。
[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton6()   {      CString strPath="HARDWARE\\DESCRIPTION\\System";      CRegKey regKey;      LONG lResult;      lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);            //打开注册表主键         if (lResult!=ERROR_SUCCESS)//读取键值不成功         {            AfxMessageBox("错误:无法查询有关的注册表信息");            return;        }        char chBiosVersion[2500];      DWORD dwSize=2500;      regKey.QueryValue((char*)chBiosVersion,"VideoBiosVersion",&dwSize);               m_strBiosID=chBiosVersion;       UpdateData(FALSE);        regKey.Close();//关闭注册表        }  void CSystemHardwareInfoDlg::OnButton6()
{
 CString strPath="HARDWARE\\DESCRIPTION\\System";
 CRegKey regKey;
 LONG lResult;
 lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
 
    //打开注册表主键  
    if (lResult!=ERROR_SUCCESS)//读取键值不成功  
    { 
        AfxMessageBox("错误:无法查询有关的注册表信息"); 
        return; 
    } 
    char chBiosVersion[2500];
 DWORD dwSize=2500;
    regKey.QueryValue((char*)chBiosVersion,"VideoBiosVersion",&dwSize); 
    
    m_strBiosID=chBiosVersion;
    UpdateData(FALSE); 
    regKey.Close();//关闭注册表
 
}
获取显卡BIOS更新日期
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System子键中获取VideoBiosDate的键值。

[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton7()   {      CString strPath="HARDWARE\\DESCRIPTION\\System";      CRegKey regKey;      LONG lResult;      lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);            //打开注册表主键         if (lResult!=ERROR_SUCCESS)//读取键值不成功         {            AfxMessageBox("错误:无法查询有关的注册表信息");            return;        }        char chVideoBiosDate[50];      DWORD dwSize=50;      regKey.QueryValue((char*)chVideoBiosDate,"VideoBiosDate",&dwSize);              m_strBiosDate=chVideoBiosDate;       UpdateData(FALSE);        regKey.Close();//关闭注册表        }  void CSystemHardwareInfoDlg::OnButton7()
{
 CString strPath="HARDWARE\\DESCRIPTION\\System";
 CRegKey regKey;
 LONG lResult;
 lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
 
    //打开注册表主键  
    if (lResult!=ERROR_SUCCESS)//读取键值不成功  
    { 
        AfxMessageBox("错误:无法查询有关的注册表信息"); 
        return; 
    } 
    char chVideoBiosDate[50];
 DWORD dwSize=50;
    regKey.QueryValue((char*)chVideoBiosDate,"VideoBiosDate",&dwSize); 
 
    m_strBiosDate=chVideoBiosDate;
    UpdateData(FALSE); 
    regKey.Close();//关闭注册表
 
}

获取系统BIOS版本号
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System子键中获取SystemBiosVersion的键值。
[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton8()   {      CString strPath="HARDWARE\\DESCRIPTION\\System";      CRegKey regKey;      LONG lResult;      lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);            //打开注册表主键         if (lResult!=ERROR_SUCCESS)//读取键值不成功         {            AfxMessageBox("错误:无法查询有关的注册表信息");            return;        }        char chBios[2500];      DWORD dwSize=2500;      regKey.QueryValue((char*)chBios,"SystemBiosVersion",&dwSize);              m_strBios=chBios;       UpdateData(FALSE);        regKey.Close();//关闭注册表        }  void CSystemHardwareInfoDlg::OnButton8()
{
 CString strPath="HARDWARE\\DESCRIPTION\\System";
 CRegKey regKey;
 LONG lResult;
 lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
 
    //打开注册表主键  
    if (lResult!=ERROR_SUCCESS)//读取键值不成功  
    { 
        AfxMessageBox("错误:无法查询有关的注册表信息"); 
        return; 
    } 
    char chBios[2500];
 DWORD dwSize=2500;
    regKey.QueryValue((char*)chBios,"SystemBiosVersion",&dwSize); 
 
    m_strBios=chBios;
    UpdateData(FALSE); 
    regKey.Close();//关闭注册表
 
}

获取系统BIOS更新日期
获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System子键中获取SystemBiosDate的键值。
[cpp] view plain copy print?void CSystemHardwareInfoDlg::OnButton9()   {      CString strPath="HARDWARE\\DESCRIPTION\\System";      CRegKey regKey;      LONG lResult;      lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);            //打开注册表主键         if (lResult!=ERROR_SUCCESS)//读取键值不成功         {            AfxMessageBox("错误:无法查询有关的注册表信息");            return;        }        char chBiosDate[50];      DWORD dwSize=50;      regKey.QueryValue((char*)chBiosDate,"SystemBiosDate",&dwSize);              m_strSystemBiosDate=chBiosDate;       UpdateData(FALSE);        regKey.Close();//关闭注册表              }  void CSystemHardwareInfoDlg::OnButton9()
{
 CString strPath="HARDWARE\\DESCRIPTION\\System";
 CRegKey regKey;
 LONG lResult;
 lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
 
    //打开注册表主键  
    if (lResult!=ERROR_SUCCESS)//读取键值不成功  
    { 
        AfxMessageBox("错误:无法查询有关的注册表信息"); 
        return; 
    } 
    char chBiosDate[50];
 DWORD dwSize=50;
    regKey.QueryValue((char*)chBiosDate,"SystemBiosDate",&dwSize); 
 
    m_strSystemBiosDate=chBiosDate;
    UpdateData(FALSE); 
    regKey.Close();//关闭注册表
 
 
}



你可能感兴趣的:(Windows编程)