Qt 获取Windows内存信息

通过调用Windows API来获取Windows 内存信息,并显示在界面上,通过与Windows 内存管理器对比可以看到结果是正确的。

实现的小工具的界面效果与内存管理器对比如下:

实现的完整代码:

#pragma execution_character_set("utf-8")
#ifndef QMEMORYINFO_H
#define QMEMORYINFO_H

#include <QtWidgets/QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QTimer>

class QMemoryInfo : public QWidget
{
	Q_OBJECT

public:
	QMemoryInfo(QWidget *parent = 0);
	~QMemoryInfo();

private:
	void updateInfo();

	QTimer *m_timer;

	QLabel *m_memoryUsedLabel;
	QLabel *m_totalPhysLabel;
	QLabel *m_availPhysLabel;
	QLabel *m_totalPageFileLabel;
	QLabel *m_availPageFileLabel;
	QLabel *m_totalVirtualLabel;
	QLabel *m_availVirtualLabel;
	QLabel *m_availExVirtualLabel;

	QLineEdit *m_memoryUsedEdit;
	QLineEdit *m_totalPhysEdit;
	QLineEdit *m_availPhysEdit;
	QLineEdit *m_totalPageFileEdit;
	QLineEdit *m_availPageFileEdit;
	QLineEdit *m_totalVirtualEdit;
	QLineEdit *m_availVirtualEdit;
	QLineEdit *m_availExVirtualEdit;
};

#endif // QMEMORYINFO_H
#include "qmemoryinfo.h"
#include <QGridLayout>
#include <windows.h>
#include <sysinfoapi.h>

QMemoryInfo::QMemoryInfo(QWidget *parent)
	: QWidget(parent)
{
	m_memoryUsedLabel = new QLabel(this);
	m_totalPhysLabel = new QLabel(this);
	m_availPhysLabel = new QLabel(this);
	m_totalPageFileLabel = new QLabel(this);
	m_availPageFileLabel = new QLabel(this);
	m_totalVirtualLabel = new QLabel(this);
	m_availVirtualLabel = new QLabel(this);
	m_availExVirtualLabel = new QLabel(this);

	m_memoryUsedEdit = new QLineEdit(this);
	m_totalPhysEdit = new QLineEdit(this);
	m_availPhysEdit = new QLineEdit(this);
	m_totalPageFileEdit = new QLineEdit(this);
	m_availPageFileEdit = new QLineEdit(this);
	m_totalVirtualEdit = new QLineEdit(this);
	m_availVirtualEdit = new QLineEdit(this);
	m_availExVirtualEdit = new QLineEdit(this);

	m_memoryUsedLabel->setText(QObject::tr("内存使用率:"));
	m_totalPhysLabel->setText("总物理内存:");
	m_availPhysLabel->setText("可用物理内存:");
	m_totalPageFileLabel->setText("系统提交总数:");
	m_availPageFileLabel->setText("系统提交数:");
	m_totalVirtualLabel->setText("总虚拟内存:");
	m_availVirtualLabel->setText("可用虚拟内存:");
	m_availExVirtualLabel->setText("可用扩展虚拟:");

	m_memoryUsedEdit->setReadOnly(true);
	m_totalPhysEdit->setReadOnly(true);
	m_availPhysEdit->setReadOnly(true);
	m_totalPageFileEdit->setReadOnly(true);
	m_availPageFileEdit->setReadOnly(true);
	m_totalVirtualEdit->setReadOnly(true);
	m_availVirtualEdit->setReadOnly(true);
	m_availExVirtualEdit->setReadOnly(true);

	QGridLayout *pLay = new QGridLayout(this);
	int iLine = 0;
	pLay->addWidget(m_memoryUsedLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_memoryUsedEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_totalPhysLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_totalPhysEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_availPhysLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_availPhysEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_totalPageFileLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_totalPageFileEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_availPageFileLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_availPageFileEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_totalVirtualLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_totalVirtualEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_availVirtualLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_availVirtualEdit, iLine, 1, 1, 3);
	iLine++;
	pLay->addWidget(m_availExVirtualLabel, iLine, 0, 1, 1);
	pLay->addWidget(m_availExVirtualEdit, iLine, 1, 1, 3);

	m_timer = new QTimer(this);
	connect(m_timer, &QTimer::timeout, this, &QMemoryInfo::updateInfo);
	m_timer->start(100);
}

QMemoryInfo::~QMemoryInfo()
{

}

void QMemoryInfo::updateInfo()
{
	MEMORYSTATUSEX memoryInfo;
	memoryInfo.dwLength = sizeof(memoryInfo);
	GlobalMemoryStatusEx(&memoryInfo);

	UINT mb = 1024 * 1024;
	m_memoryUsedEdit->setText(QString::number(memoryInfo.dwMemoryLoad).append("%"));
	m_totalPhysEdit->setText(QString::number(memoryInfo.ullTotalPhys / mb));
	m_availPhysEdit->setText(QString::number(memoryInfo.ullAvailPhys / mb));
	m_totalPageFileEdit->setText(QString::number(memoryInfo.ullTotalPageFile / mb));
	m_availPageFileEdit->setText(QString::number(memoryInfo.ullTotalPageFile / mb - memoryInfo.ullAvailPageFile / mb));
	m_totalVirtualEdit->setText(QString::number(memoryInfo.ullTotalVirtual / mb));
	m_availVirtualEdit->setText(QString::number(memoryInfo.ullAvailVirtual / mb));
	m_availExVirtualEdit->setText(QString::number(memoryInfo.ullAvailExtendedVirtual / mb));
	update();
}

交流qq:1245178753

本文地址:http://blog.csdn.net/u011417605/article/details/51564802

源码下载:http://download.csdn.net/detail/u011417605/9538726

时间: 2024-10-07 18:51:09

Qt 获取Windows内存信息的相关文章

windows系统调用 获取当前内存信息

1 #include "iostream" 2 #include "windows.h" 3 #include "shlwapi.h" 4 #include "iomanip" 5 #pragma comment(lib,"shlwapi.lib") 6 using namespace std; 7 8 void main(){ 9 SYSTEM_INFO si; 10 ZeroMemory(&si

获取windows版本信息

procedure TForm1.Button1Click(Sender: TObject); Var OSVI:OSVERSIONINFO; begin OSVI.dwOSversioninfoSize:=Sizeof(OSVERSIONINFO); GetVersionEx(OSVI); Caption:=IntToStr(OSVI.dwMinorVersion)+',' +IntToStr(OSVI.dwMinorVersion)+',' +IntToStr(OSVI.dwBuildNum

Python运维之获取操作系统的内存信息

试用一下这个博客,好用的话以后就彻底弃用CSDN,换这个了! 要使用Python获取计算机的内存信息需要用到psutil模块,能够获得的内存信息有内存总量.可用内存总量.已用内存量.内存使用百分比等信息. 写一个简单的小脚本,代码如下: #!/usr/bin/python import psutil pc_mem =psutil.virtual_memory() div_gb_factor =(1024.0 ** 3) print("totalmemor: %fGB" % float(

获取计算机内存信息

实现效果: 知识运用: ManagementObjectSearcher类的Get方法 //用于调用指定的WMI查询并返回结果集合 public ManagementObjectCollection Get () //返回一个ManagementObjectCollection 包含匹配指定查询的对象   PropertyData类的Value属性 //该类表是关于WMI属性的信息 public Object Value {get; set;} //Value属性用来获取或设置属性的当前值 实现

zabbix 获取Windows Server 信息

zabbix windows 数据采集 zabbix对windows的支持,并没有Linux平台那么的强大,但可以通过使用windows的typeperf.exe 对windows性能数据进行采集 TypePerf.exe是一个命令行工具,包括把Windows操作系统的性能计数器数据输出到命令窗口或写入到支持该功能的日志文件格式中. 常见的参数如下: PerfCounter=UserPerfCountercpu,"\Processor(_Total)\% Processor Time"

Qt获取系统串口信息

打开注册表 菜单->运行 输入regedit 到目录 HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\ 中,该目录下有的com口表示系统当前存在使用的com

利用Python脚本获取Windows和Linux的系统版本信息

查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了. 在Python的世界里,获取Windows版本信息和Linux的版本信息都可以采用platform模块,但platform模块也不是万能的,有些特殊的信息(比如Windows的内部版本号)这个模块拿不到,那么只能另辟蹊径了. 在Linux系统中,可以简单的认为一切都是文件,那么就算没有现成的命令可用时

几个获取Windows系统信息的Delphi程序

本文所有的窗体界面略去,读者可根据程序自行添加各窗口组件. 1.获取windows版本信息 可以通过Windows API函数GetVersionEx来获得. 具体程序如下: Procedure Tform1.Button1Click(sender:TObject);  Var  OSVI:OSVERSIONINFO;  begin  OSVI.dwOSversioninfoSize:=Sizeof(OSVERSIONINFO):  GetVersionEx(OSVI);  label1.Cap

PHP检测获取内存信息

PHP也可以检测获取到Windows的内存信息,而且代码还挺简单,无意发现的,觉得以后能用上,在此与大家分享. 本代码将得到总内存.初始使用等内存信息: <?php echo "初始: ".memory_get_usage()." 字节 \n"; for ($i = 0; $i < 100000; $i++) { $array []= md5($i); } for ($i = 0; $i < 100000; $i++) { unset($array