Загрузка данных


#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";