-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathXSystemInfo.cpp
More file actions
106 lines (88 loc) · 2.7 KB
/
Copy pathXSystemInfo.cpp
File metadata and controls
106 lines (88 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "XSystemInfo.h"
XSystemInfo m_sysInfo;
XSystemInfo::XSystemInfo(QObject *parent) : QObject(parent)
{
}
QString getMotherboardSerial_Windows() {
QProcess process;
process.start("wmic", QStringList() << "baseboard" << "get" << "serialnumber");
if (!process.waitForFinished()) {
return "Error: " + process.errorString();
}
QString result = process.readAllStandardOutput();
QStringList lines = result.split("\r\n", Qt::SkipEmptyParts);
if (lines.size() >= 2) {
return lines[1].trimmed();
}
return "Not Found";
}
void XSystemInfo::initializing()
{
m_info.m_motherboard = getValue("wmic", QStringList() << "baseboard" << "get" << "serialnumber");
m_info.m_cpu = getValue("wmic", QStringList() << "cpu" << "get" << "processorid");
m_info.m_cpuCore = QThread::idealThreadCount();
m_info.m_winVer = getValue("wmic", QStringList() << "os" << "get" << "Caption");
// ### checking windows name
QString m_first = getValue("whoami", {}, 0);
QString m_second = QHostInfo::localHostName();
if(qEnvironmentVariable("USER").isEmpty() == false)
m_second.append(QString("\\%1").arg(qEnvironmentVariable("USER")));
else
m_second.append(QString("\\%1").arg(qEnvironmentVariable("USERNAME")));
if(m_first.toLower().compare(m_second.toLower()) == 0)
m_info.m_computerName = m_first.toLower();
else
{
if(m_first.isEmpty())
m_info.m_computerName = m_second.toLower();
else if(m_second.isEmpty())
m_info.m_computerName = m_first.toLower();
else
m_info.m_computerName.append(QString("%1 & %2").arg(m_first).arg(m_second));
}
}
SysInfo_t XSystemInfo::get()
{
return m_info;
}
QString XSystemInfo::getValue(QString mApp, QStringList m_command, int index)
{
QProcess m_process;
QEventLoop m_event;
QObject::connect(&m_process, SIGNAL(finished(int, QProcess::ExitStatus)), &m_event, SLOT(quit()));
if(m_command.isEmpty())
m_process.start(mApp);
else
m_process.start(mApp, m_command);
if (!m_process.waitForStarted()) {
LOG(QString("Failed to start process: %1").arg(m_process.errorString()));
return "Error";
}
m_event.exec();
if (m_process.exitStatus() != QProcess::NormalExit || m_process.exitCode() != 0) {
LOG(QString("Process error: %1").arg(m_process.errorString()));
return "Error";
}
QString result = m_process.readAllStandardOutput();
QStringList lines = result.split("\r\n", Qt::SkipEmptyParts);
if (lines.isEmpty()) {
LOG("No output from command.");
return "Error";
}
if (index >= 0) {
if (index < lines.size()) {
return lines[index].trimmed();
} else {
LOG("Index out of range.");
return "Error";
}
}
else {
if (lines.size() >= 2) {
return lines[1].trimmed();
} else {
LOG("No valid output (expected at least 2 lines).");
return "Error";
}
}
}