工控编程吧
标题:
377上位机VC MFC通过注册表获取系统CPU内存信息
[打印本页]
作者:
qq263946146
时间:
2016-9-17 10:49
标题:
377上位机VC MFC通过注册表获取系统CPU内存信息
(, 下载次数: 0)
上传
点击文件名下载附件
获取系统CPU内存信息
功能展示
程序运行都会对系统有些要求,不然程序功能不能完全执行,或会影响系统的稳定性,所以在程序运行或安装前就得获取系统的相关参数来判断是否安装或运行我们的程序,我们当前例程就通过注册表实现系统版本,CPU,内存等信息的获取,效果如图。点出按钮后例程会从注册表读取系统的信息,其中内存大小是通过函数GlobalMemoryStatus()获取
要点提示
系统CPU处理器的相关信息都保存在注册表HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0子键下,0表示第O个CPU,系统有多个CPU,可能还会有1,2,3等等。子键右侧有众多健值项,其中名为~MHz 键值项对应的值就是CPU的频率,单位MHz;
系统的版本信息存储在注册表HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion子键下,子键右侧有众多键值项,其中ProductName键值项为系统的名称,CurrentVersion为系统的当前版本,ProductId为系统的ID;
另外系统的内存信息是通过GlobalMemoryStatus()函数获取,函数仅跟一个结构体指针参数MEMORYSTATUS ms,结构体的成员ms.dwTotalPhys便是内存大小,单位byte;
实现功能
1.新建基于对话框的应用程序
2.添加编辑框控件IDC_EDIT1,IDC_EDIT2,IDC_EDIT3分别对应系统版本,CPU主频,内存大小,再添加按钮<获取系统信息>关联点击函数实现功能
void CGkbc8Dlg::OnButton1()
{
CString sText,sTemp;
HKEY hKey;
DWORD dwType = REG_DWORD, dwSize = sizeof(DWORD);
DWORD dwCpuSpeed;
char cData[_MAX_PATH];
//<>CPU主频
int nResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
0, KEY_READ, &hKey);
if(ERROR_SUCCESS != nResult)
{
MessageBox("打开注册表失败");
return ;
}
nResult = RegQueryValueEx(hKey, "~MHz", NULL,&dwType, (BYTE*)&dwCpuSpeed, &dwSize);
if(ERROR_SUCCESS != nResult)
MessageBox("获取主频失败");
RegCloseKey(hKey);
sText.Format("CPU主频为:%dMHz",dwCpuSpeed);
SetDlgItemText(IDC_EDIT2,sText);
//<>系统版本
nResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",0,KEY_READ, &hKey);
dwSize = _MAX_PATH;
RegQueryValueEx(hKey, "ProductName", NULL,&dwType, (unsigned char *)cData, &dwSize);
sTemp.Format("系统名:%s/ ",cData); sText = sTemp;
dwSize = _MAX_PATH;
RegQueryValueEx(hKey, "CurrentVersion", NULL,&dwType, (unsigned char *)cData, &dwSize);
sTemp.Format("版本:%s/ ",cData); sText += sTemp;
dwSize = _MAX_PATH;
RegQueryValueEx(hKey, "ProductId", NULL,&dwType, (unsigned char *)cData, &dwSize);
sTemp.Format("ID:%s",cData); sText += sTemp;
RegCloseKey(hKey);
SetDlgItemText(IDC_EDIT1,sText);
//<>
MEMORYSTATUS ms ;
ms.dwLength = sizeof (ms) ;
GlobalMemoryStatus (&ms) ;
sText.Format("Memory: %u Mb physical, %u Mb virtual\n",
(ms.dwTotalPhys)/(1024*1024)+1, (ms.dwTotalVirtual)/(1024*1024)+1);
SetDlgItemText(IDC_EDIT3,sText);
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/8aaacb0071fd94f196e0d1cc7aa0bb2e/0/0/w_19rswmzg3t.swf-albumId=6292796709-tvId=6292796709-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4