当前位置: 源码素材网 » VC++教程 » 详情页

VC++代码获取系统硬件信息

  •   时间:2019-06-11
  • 概述:CPU 内存 获取信息

VC++代码获取系统硬件信息,介绍了如何获得处理器和内存信息。有的程序员希望能知道运行自己程序的机器安装的是什么处理器,然后就此信息用于桌面帮助信息,或只是用来确定自己的应用程序能否在此机器上运行。实现方法和思路:

可以使用 Windows API 函数GetSystemInfo 来获取处理器信息。此函数返回多种信息,其中就包括处理器的类型。所有信息都在结构体SYSTEM_INFO 中,该结构定义如下:

typedef struct _SYSTEM_INFO {
union {
DWORD dwOemId;
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;

使用Windows API 函数GlobalMemoryStatus 来获取内存信息。该函数的返回信息都在结构体MEMORYSTATUS 中,该结构体定义如下:

typedef struct _MEMORYSTATUS {
DWORD dwLength; //结构体大小,sizeof(MEMORYSTATUS)
DWORD dwMemoryLoad; //内存使用比率
DWORD dwTotalPhys; //总的物理内存字节数
DWORD dwAvailPhys; //可用物理内存字节数
DWORD dwTotalPageFile; //总的页面文件字节数
DWORD dwAvailPageFile; //可用页面文件字节数
DWORD dwTotalVirtual; //总的虚拟类重字节数
DWORD dwAvailVirtual; //可用虚拟内存字节数
} MEMORYSTATUS, *LPMEMORYSTATUS;

程序代码
(1)利用AppWizard 向导生成基于对话框的应用程序HardwareInfoDemo。
(2)在对话框资中添加一个列表框控件(ListCtrl),用它来于显示所取得的机器的硬件信息。给列表框控件添加一个控件变量m_CtrlList,修改CHardwareInfoDemoDlg 类的OnInitDialog 函数,代码如下:

BOOL CHardwareInfoDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//初始化IDC_LIST 控件
m_CtrlList.InsertColumn(0, "项目", LVCFMT_LEFT, 140);
m_CtrlList.InsertColumn(1, "数值", LVCFMT_LEFT, 150);
//获取硬件信息
GetCPUInfo();
GetMemInfo();
return TRUE; // return TRUE unless you set the focus to a control
}

(3)在CHardwareInfoDemoDlg 类中添加一个私有成员函数GetCPUInfo,以获取和显示系统的处理器信息,代码如下:

void CHardwareInfoDemoDlg::GetCPUInfo() //CPU 信息
{
CString strText;
SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);
switch(SysInfo.wProcessorArchitecture) //CPU 的体系结构
{
case PROCESSOR_ARCHITECTURE_INTEL: //只识别Intel 的CPU
strText="Intel ";
break;
default: strText="未知类型CPU";
}
if(SysInfo.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL)
{
switch(SysInfo.wProcessorLevel) //CPU 型号
{
case 3: strText+="80386"; break;
case 4: strText+="80486"; break;
case 5: strText+="Pentium"; break;
case 6: strText+="Pentium3"; break;
case 7: strText+="Pentium4"; break;
default: strText+="x86";
}
}
//显示CPU 信息
m_CtrlList.InsertItem(0, "处理器");
m_CtrlList.SetItemText(0, 1, strText);
}

(4)在CHardwareInfoDemoDlg 类中添加一个私有成员函数GetMemInfo,以获取和显示系统的内存信息,代码如下:

void CHardwareInfoDemoDlg::GetMemInfo() //内存信息
{
CString strText;
double dblMem;
MEMORYSTATUS MemInfo;
GlobalMemoryStatus(&MemInfo); //获取内存信息
//物理内存
m_CtrlList.InsertItem(1, "总的物理内存");
dblMem=MemInfo.dwTotalPhys/1024/1024; //单位换算(byte-->MB)
strText.Format("%.2fMB", dblMem);
m_CtrlList.SetItemText(1, 1, strText);
m_CtrlList.InsertItem(2, "可用物理内存");
dblMem=MemInfo.dwAvailPhys/1024/1024; //单位换算(byte-->MB)
strText.Format("%.2fMB", dblMem);
m_CtrlList.SetItemText(2, 1, strText);
//分页文件
m_CtrlList.InsertItem(3, "分页文件空间");
dblMem=MemInfo.dwTotalPageFile/1024/1024; //单位换算(byte-->MB)
strText.Format("%.2fMB", dblMem);
m_CtrlList.SetItemText(3, 1, strText);
m_CtrlList.InsertItem(4, "可用分页文件空间");
dblMem=MemInfo.dwAvailPageFile/1024/1024; //单位换算(byte-->MB)
strText.Format("%.2fMB", dblMem);
m_CtrlList.SetItemText(4, 1, strText);
//虚拟内存
m_CtrlList.InsertItem(5, "总的虚拟内存");
dblMem=MemInfo.dwTotalVirtual/1024/1024; //单位换算(byte-->MB)
strText.Format("%.2fMB", dblMem);
m_CtrlList.SetItemText(5, 1, strText);
}

    相关声明:

      若“VC++代码获取系统硬件信息”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。