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


#include <iostream>
#include <windows.h>
#include <string>

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;

    // ========================================================
    // ПОЛУЧЕНИЕ ИМЕНИ КОМПЬЮТЕРА
    // ========================================================
    TCHAR compNameBuffer[MAX_COMPUTERNAME_LENGTH + 1];
    DWORD compNameSize = MAX_COMPUTERNAME_LENGTH + 1;

    if (GetComputerName(compNameBuffer, &compNameSize)) {
        computerNameStr = compNameBuffer;
        std::wcout << L"Имя компьютера: " << computerNameStr << std::endl;
    } else {
        std::wcout << L"Ошибка получения имени компьютера. Код: " << GetLastError() << std::endl;
    }

    std::wcout << std::endl;

    // ========================================================
    // УЛУЧШЕНИЕ: ПОЛУЧЕНИЕ ИМЕНИ ПОЛЬЗОВАТЕЛЯ (Часть 3)
    // ========================================================
    TCHAR userNameBuffer[UNLEN + 1];
    DWORD userNameSize = UNLEN + 1;

    if (GetUserName(userNameBuffer, &userNameSize)) {
        userNameStr = userNameBuffer;
        std::wcout << L"Имя пользователя: " << userNameStr << std::endl;
    } else {
        std::wcout << L"Ошибка получения имени пользователя. Код: " << GetLastError() << std::endl;
    }

    std::wcout << std::endl;

    // ========================================================
    // УЛУЧШЕНИЕ: ПОЛУЧЕНИЕ ИНФОРМАЦИИ О ПРОЦЕССОРЕ (Часть 3)
    // ========================================================
    SYSTEM_INFO sysInfo;
    GetSystemInfo(&sysInfo);
    numberOfProcessors = sysInfo.dwNumberOfProcessors;
    std::wcout << L"Количество ядер процессора: " << numberOfProcessors << std::endl;

    std::wcout << 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"Общий объем ОЗУ: " << totalRamGb << L" ГБ" << std::endl;
        std::wcout << L"Доступный объем ОЗУ: " << availRamGb << L" ГБ" << std::endl;
        std::wcout << L"Процент загрузки памяти: " << memoryLoad << L"%" << std::endl;
    } else {
        std::wcout << L"Ошибка получения информации о памяти. Код: " << GetLastError() << std::endl;
    }

    std::wcout << 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"Всего ОЗУ: " + std::to_wstring(totalRamGb) + L" ГБ\n";
    message += L"Свободно ОЗУ: " + std::to_wstring(availRamGb) + L" ГБ\n";
    message += L"Загрузка: " + std::to_wstring(memoryLoad) + L"%\n";

    // ========================================================
    // ВЫВОД ДИАЛОГОВОГО ОКНА
    // ========================================================
    MessageBox(
        NULL,
        message.c_str(),
        L"Лабораторная работа №1",
        MB_OK | MB_ICONINFORMATION
    );