Загрузка данных
#include <iostream>
#include <windows.h>
#include <lmcons.h> // Ошибка 1: Подключено для определения UNLEN (длина имени пользователя)
#include <string>
#include <sstream>
#include <iomanip>
// Функция для удобного форматирования чисел с плавающей точкой
std::wstring formatDouble(double value, int precision = 2) {
std::wstringstream stream;
stream << std::fixed << std::setprecision(precision) << value;
return stream.str();
}
int main() {
// НАСТРОЙКА КОДИРОВКИ КОНСОЛИ
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
std::wcout << L"Системная информация" << std::endl;
std::wcout << std::endl;
// Переменные для хранения данных
std::wstring computerNameStr = L"Неизвестно";
std::wstring userNameStr = L"Неизвестно";
double totalRamGb = 0.0;
double availRamGb = 0.0;
DWORD memoryLoad = 0;
DWORD numberOfProcessors = 0;
// ========================================================
// ПОЛУЧЕНИЕ ИМЕНИ КОМПЬЮТЕРА
// ========================================================
wchar_t compNameBuffer[MAX_COMPUTERNAME_LENGTH + 1];
DWORD compNameSize = MAX_COMPUTERNAME_LENGTH + 1;
if (GetComputerNameW(compNameBuffer, &compNameSize)) {
computerNameStr = compNameBuffer;
std::wcout << L"Имя компьютера: " << computerNameStr << std::endl;
} else {
std::wcout << L"Ошибка получения имени компьютера. Код: " << GetLastError() << std::endl;
}
// ========================================================
// ПОЛУЧЕНИЕ ИМЕНИ ПОЛЬЗОВАТЕЛЯ (Часть 3)
// ========================================================
wchar_t userNameBuffer[UNLEN + 1];
DWORD userNameSize = UNLEN + 1;
if (GetUserNameW(userNameBuffer, &userNameSize)) {
userNameStr = userNameBuffer;
std::wcout << L"Имя пользователя: " << userNameStr << std::endl;
} else {
std::wcout << L"Ошибка получения имени пользователя. Код: " << GetLastError() << std::endl;
}
// ========================================================
// ПОЛУЧЕНИЕ ИНФОРМАЦИИ О ПРОЦЕССОРЕ (Часть 3)
// ========================================================
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
numberOfProcessors = sysInfo.dwNumberOfProcessors;
std::wcout << L"Количество ядер процессора: " << numberOfProcessors << std::endl;
// ========================================================
// ПОЛУЧЕНИЕ ИНФОРМАЦИИ ОБ ОПЕРАТИВНОЙ ПАМЯТИ
// ========================================================
MEMORYSTATUSEX memStatus;
memStatus.dwLength = sizeof(memStatus);
if (GlobalMemoryStatusEx(&memStatus)) {
// Переводим байты в гигабайты (байты / 1024^3)
totalRamGb = static_cast<double>(memStatus.ullTotalPhys) / (1024.0 * 1024.0 * 1024.0);
availRamGb = static_cast<double>(memStatus.ullAvailPhys) / (1024.0 * 1024.0 * 1024.0);
memoryLoad = memStatus.dwMemoryLoad;
std::wcout << L"Общий объем ОЗУ: " << formatDouble(totalRamGb) << L" ГБ" << std::endl;
std::wcout << L"Доступный объем ОЗУ: " << formatDouble(availRamGb) << L" ГБ" << std::endl;
std::wcout << L"Процент загрузки памяти: " << memoryLoad << L"%" << std::endl;
} else {
std::wcout << L"Ошибка получения информации о памяти. Код: " << GetLastError() << std::endl;
}
// ========================================================
// ФОРМИРОВАНИЕ СТРОКИ ДЛЯ ДИАЛОГОВОГО ОКНА
// ========================================================
std::wstring message = L"Системная информация:\n";
message += L"Компьютер: " + computerNameStr + L"\n";
message += L"Пользователь: " + userNameStr + L"\n";
message += L"Ядер процессора: " + std::to_wstring(numberOfProcessors) + L"\n";
message += L"Всего ОЗУ: " + formatDouble(totalRamGb) + L" ГБ\n";
message += L"Свободно ОЗУ: " + formatDouble(availRamGb) + L" ГБ\n";
message += L"Загрузка: " + std::to_wstring(memoryLoad) + L"%\n";