#include "widget.h"
#include "QMenu"
#include "QTimer"
#include "QDateTime"
#include "QPixmap"
#include "info.h"
#include "OlsApi.h"
#include "nvml.h"
#include "ui_widget.h"
#include <QTcpSocket>
#include "QSystemTrayIcon"
#include "QHostAddress"
#include <QProcess>
#include <QSettings>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include "QMovie"
#include <QDir>
#include "QDebug"
#include "QThread"
#include "QProcess"
#include "windows.h"
//#include <QtSystemPerformanceInfo>
//实现功能 查询CPU温度 内存使用率 换成64位的程序
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置动图
ui->label->setMovie(gif);
gif->start();
//连接服务器
m_tcpSocket.connectToHost(QHostAddress("192.168.31.207"),3333);
if (m_tcpSocket.waitForConnected()) {
qDebug() << "Connected to connect to ESP32.";
}
CPUInit();
GPUInit();
int cpuCount = QThread::idealThreadCount();
qDebug() << "CPU Count:" << cpuCount;
//启动抓取数据功能
connect(time,SIGNAL(timeout()),this,SLOT(slotGetInfo()));
connect(time,SIGNAL(timeout()),this,SLOT(slotGetCPUTemp()));
connect(time,SIGNAL(timeout()),this,SLOT(slotGetGPUTemp()));
connect(time,SIGNAL(timeout()),this,SLOT(uploadData()));
time->start(2000);
}
Widget::~Widget()
{
delete ui;
delete m_Menu;
delete information;
delete gif;
delete time;
}
//开机自启动
void Widget::appAuto(bool Autorun)
{
QString application_name="GenshinImapctMonitor";
QSettings *settings = new QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
if(Autorun){
QString application_path = QApplication::applicationFilePath();
settings->setValue(application_name, application_path.replace("/", "\\"));
}else{
settings->remove(application_name);
}
delete settings;
}
//判断状态
bool Widget::isAppAutoRun()
{
QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
QString strValue = reg->value("GenshinImapctMonitor").toString(); //获取注册表中“YourAppName”对应的路径值
QString path = QDir::toNativeSeparators(QCoreApplication::applicationFilePath()); //获取当前程序完整路径
bool flag = (strValue == path); //flag为true则表示注册表中已有此项
return flag;
}
//关闭事件
void Widget::closeEvent(QCloseEvent *event)
{
m_SystemTrayIcon = new QSystemTrayIcon();
m_SystemTrayIcon->setIcon(QIcon(":/icon/YS.jpg")); // 托盘时显示的图片
m_SystemTrayIcon->setToolTip("snatching"); // 鼠标在托盘图片时的提示
//给QSystemTrayIcon添加槽函数
connect(m_SystemTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason)));
//建立托盘操作的菜单
CreatAction();
CreatMenu();
m_SystemTrayIcon->show(); // 显示图片图标
this->hide();
}
//创建托盘菜单
void Widget::CreatMenu()
{
m_Menu = new QMenu(this);//新增菜单项---显示主界面
m_Menu->addAction(m_QActionShowInfo);
m_Menu->addSeparator();
m_Menu->addAction(m_QActionExitApp); //新增菜单项---退出程序
m_SystemTrayIcon->setContextMenu(m_Menu);//把QMenu赋给QSystemTrayIcon对象
}
//添加托盘活动
void Widget::CreatAction()
{
m_QActionShowInfo = new QAction("Info",this);//信息
connect(m_QActionShowInfo,SIGNAL(triggered()),this,SLOT(slotActionInfo()));
m_QActionExitApp = new QAction("Exit",this);//退出
connect(m_QActionExitApp, SIGNAL(triggered()), this, SLOT(slotActionExitApp()));
}
void Widget::uploadInfo()
{
QString str1=cpuInfo+","+gpuInfo;
qDebug()<<"SSSSS"<<str1;
m_tcpSocket.write(str1.toUtf8());
m_tcpSocket.waitForBytesWritten();
}
//还原状态
void Widget::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
{
switch (reason)
{
case QSystemTrayIcon::Trigger:
//单击托盘图标
break;
case QSystemTrayIcon::DoubleClick:
//双击托盘图标
//双击后显示主程序窗口
this->show();
m_SystemTrayIcon->hide();
break;
default:
break;
}
}
//主页面
void Widget::slotActionMain()
{
this->show();
m_SystemTrayIcon->hide();
}
//退出
void Widget::slotActionExitApp()
{
exit(0);
}
//信息
void Widget::slotActionInfo()
{
information->show();
}
//获取硬件信息
void Widget::slotGetInfo()
{
//获取当前时间
// QDateTime DateTime=QDateTime::currentDateTime();
// qDebug() <<"当前时间:" << DateTime;
//获取CPU使用率
//获取内存使用率
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
useageRam=int(statex.dwMemoryLoad);
qDebug() <<"内存使用率:" << useageRam;
//获取GPU使用率
result = nvmlDeviceGetUtilizationRates(device, &utilization);
if (result != NVML_SUCCESS) {
qDebug() << "Failed to get GPU utilization.";
}
gpuram=int(utilization.gpu);
qDebug()<< "GPU使用率:" << gpuram << "%";
}
//CPU初始化 必须初始化 否则温度会出错
void Widget::CPUInit()
{
cpustate1=InitializeOls();
cpustate2=IsCpuid();
if (!cpustate1) {qDebug() << "Failed to initialize WinRing0.";}
if (!cpustate2) {qDebug() << "CPU does not support CPUID.";}
}
//获取CPU温度
void Widget::slotGetCPUTemp()
{
DWORD dwStatus;
DWORD dwCpuTemp1,dwCpuTemp2;
Rdmsr(0x1A2, &dwCpuTemp1, &dwStatus);
initTemp=dwCpuTemp1;
initTemp &=0xff0000;
initTemp = initTemp >> 16;
Rdmsr(0x19C, &dwCpuTemp2, &dwStatus);
finalTemp =dwCpuTemp2;
finalTemp&=0xff0000; // 提取温度值
finalTemp = finalTemp >> 16;
cputemp=(int)(initTemp-finalTemp);
cpuuse=cpuUseage();
qDebug() << "CPU Temperature: " << cputemp << "°C";
//qDebug() << "CPU USE: " << cpuuse << "%";
// 清理WinRing0
//DeinitializeOls();
}
//获取CPU使用率
int Widget::cpuUseage()
{
static FILETIME preidleTime;
static FILETIME prekernelTime;
static FILETIME preuserTime;
FILETIME idleTime;
FILETIME kernelTime;
FILETIME userTime;
bool k = GetSystemTimes(&idleTime, &kernelTime, &userTime);
qDebug() << "GetSystemTimes:" << k;
if (!k)
return 0;
quint64 x, y;
int idle, kernel, user;
x = (preidleTime.dwHighDateTime << 31) | preidleTime.dwLowDateTime;
y = (idleTime.dwHighDateTime << 31) | idleTime.dwLowDateTime;
idle = y - x;
x = (prekernelTime.dwHighDateTime << 31) | prekernelTime.dwLowDateTime;
y = (kernelTime.dwHighDateTime << 31) | kernelTime.dwLowDateTime;
kernel = y - x;
x = (preuserTime.dwHighDateTime << 31) | preuserTime.dwLowDateTime;
y = (userTime.dwHighDateTime << 31) | userTime.dwLowDateTime;
user = y - x;
int cpuPercent = (kernel + user - idle) * 100 / (kernel + user);
preidleTime = idleTime;
prekernelTime = kernelTime;
preuserTime = userTime;
qDebug() << "msg" << cpuPercent;
return cpuPercent;
}
//初始化GPU
void Widget::GPUInit()
{
unsigned int deviceCount;
nvmlReturn_t result;
result = nvmlInit();
if (result != NVML_SUCCESS) {
qDebug() << "Failed to initialize NVML.";// 处理初始化错误
}
result = nv
没有合适的资源?快使用搜索试试~ 我知道了~
基于Qt 的CPU GPU 内存 监控软件
共26个文件
h:5个
gif:4个
lib:4个
需积分: 5 7 下载量 165 浏览量
2023-09-03
10:03:10
上传
评论 1
收藏 2.41MB RAR 举报
温馨提示
基于Qt 的CPU GPU 内存 监控软件
资源推荐
资源详情
资源评论
收起资源包目录
snatching.rar (26个子文件)
snatching
widget.ui 2KB
widget.cpp 10KB
info.h 266B
nvml.lib 65KB
WinRing0.lib 14KB
snatching.pro 1KB
info.ui 1KB
python39.lib 354KB
main.cpp 400B
python39.dll 4.31MB
WinRing0x64.lib 15KB
info.cpp 196B
Python.h 4KB
WinRing0x64.sys 14KB
WinRing0x64.dll 62KB
icon
title.jpg 27KB
elua.GIF 251KB
zhongli.GIF 14KB
fupo.GIF 126KB
YS.jpg 9KB
ganyu.GIF 352KB
OlsApi.h 20KB
nvml.h 405KB
snatching.pro.user 66KB
Icons.qrc 280B
widget.h 3KB
共 26 条
- 1
资源评论
房东不养猫
- 粉丝: 1563
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功