Volver a la página principal
domingo 22 septiembre 2024
33

Cómo obtener información del sistema en C++ usando las funciones de la API de Windows

Introducción a la API de Windows

La API de Windows es una colección de funciones y recursos que permiten interactuar directamente con el sistema operativo. Para usar estas funciones en C++, es necesario incluir el archivo de cabecera Windows.h. Esta biblioteca nos da acceso a una amplia variedad de funciones relacionadas con la gestión de procesos, memoria, dispositivos y, por supuesto, información del sistema.

Para compilar correctamente un programa que utilice la API de Windows, es necesario que se configure el entorno de desarrollo con un compilador que soporte estas librerías, como Visual Studio, o con herramientas de desarrollo que puedan trabajar con las bibliotecas de Windows en plataformas específicas.

Funciones principales de la API de Windows para obtener información del sistema

A continuación, exploraremos algunas de las funciones más comunes que nos permiten obtener datos del sistema en un entorno Windows utilizando C++.

1. Obtener el nombre del equipo

Para obtener el nombre del equipo donde se está ejecutando la aplicación, podemos usar la función GetComputerName. Esta función llena un buffer con el nombre del equipo.

#include <Windows.h>
#include <iostream>

int main() {
    char computerName[256];
    DWORD size = sizeof(computerName) / sizeof(computerName[0]);

    if (GetComputerNameA(computerName, &size)) {
        std::cout << "Nombre del equipo: " << computerName << std::endl;
    } else {
        std::cerr << "Error al obtener el nombre del equipo." << std::endl;
    }

    return 0;
}

En este código, GetComputerNameA es la versión ANSI de la función GetComputerName, que llena el buffer con el nombre del equipo y la longitud del nombre. En caso de éxito, se imprimirá el nombre en la consola.

2. Obtener la versión del sistema operativo

Para obtener la versión del sistema operativo en Windows, la función recomendada es GetVersionEx. Aunque esta función ha sido marcada como obsoleta en las versiones más recientes de Windows, sigue siendo útil en muchos casos.

#include <Windows.h>
#include <iostream>

int main() {
    OSVERSIONINFO versionInfo;
    versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

    if (GetVersionEx(&versionInfo)) {
        std::cout << "Versión de Windows: " << versionInfo.dwMajorVersion << "."
                  << versionInfo.dwMinorVersion << std::endl;
    } else {
        std::cerr << "Error al obtener la versión de Windows." << std::endl;
    }

    return 0;
}

En este código, GetVersionEx llena la estructura OSVERSIONINFO con información sobre la versión mayor y menor del sistema operativo.

3. Obtener la cantidad de memoria física y disponible

Para obtener la cantidad de memoria RAM física y disponible en el sistema, podemos utilizar la función GlobalMemoryStatusEx, que devuelve información sobre el uso de la memoria del sistema.

#include <Windows.h>
#include <iostream>

int main() {
    MEMORYSTATUSEX memoryStatus;
    memoryStatus.dwLength = sizeof(memoryStatus);

    if (GlobalMemoryStatusEx(&memoryStatus)) {
        std::cout << "Memoria física total: " << memoryStatus.ullTotalPhys / (1024 * 1024) << " MB" << std::endl;
        std::cout << "Memoria física disponible: " << memoryStatus.ullAvailPhys / (1024 * 1024) << " MB" << std::endl;
    } else {
        std::cerr << "Error al obtener el estado de la memoria." << std::endl;
    }

    return 0;
}

Aquí, la estructura MEMORYSTATUSEX nos da información detallada sobre la memoria física y virtual, así como la cantidad disponible en ese momento.

4. Obtener información sobre los procesadores

La función GetSystemInfo nos permite obtener detalles sobre el procesador, la arquitectura y el número de núcleos disponibles en el sistema.

#include <Windows.h>
#include <iostream>

int main() {
    SYSTEM_INFO systemInfo;
    GetSystemInfo(&systemInfo);

    std::cout << "Arquitectura del procesador: ";
    switch (systemInfo.wProcessorArchitecture) {
        case PROCESSOR_ARCHITECTURE_AMD64:
            std::cout << "x64 (AMD o Intel)" << std::endl;
            break;
        case PROCESSOR_ARCHITECTURE_INTEL:
            std::cout << "x86" << std::endl;
            break;
        case PROCESSOR_ARCHITECTURE_ARM:
            std::cout << "ARM" << std::endl;
            break;
        default:
            std::cout << "Desconocido" << std::endl;
            break;
    }

    std::cout << "Número de procesadores lógicos: " << systemInfo.dwNumberOfProcessors << std::endl;

    return 0;
}

En este código, GetSystemInfo llena la estructura SYSTEM_INFO con información relevante sobre la CPU. La variable wProcessorArchitecture nos da el tipo de procesador (x64, x86, ARM), mientras que dwNumberOfProcessors nos informa sobre el número de procesadores lógicos.

5. Obtener la hora y fecha del sistema

Si queremos conocer la hora y fecha del sistema actual, podemos utilizar la función GetSystemTime, que nos devuelve la hora y fecha en formato UTC.

#include <Windows.h>
#include <iostream>

int main() {
    SYSTEMTIME systemTime;
    GetSystemTime(&systemTime);

    std::cout << "Fecha y hora del sistema (UTC): "
              << systemTime.wDay << "/"
              << systemTime.wMonth << "/"
              << systemTime.wYear << " "
              << systemTime.wHour << ":"
              << systemTime.wMinute << ":"
              << systemTime.wSecond << std::endl;

    return 0;
}

GetSystemTime llena una estructura SYSTEMTIME con la fecha y hora actual en UTC.

Conclusión

Obtener información del sistema en C++ utilizando la API de Windows es una tarea bastante directa gracias a las múltiples funciones proporcionadas por esta interfaz. Desde detalles del hardware como la cantidad de memoria disponible y los procesadores, hasta información sobre la versión de Windows y el nombre del equipo, la API nos ofrece un acceso directo y eficiente a esta información. Con este conocimiento, puedes desarrollar aplicaciones más robustas y adaptables a diferentes entornos de ejecución.

Para desarrollar aplicaciones más avanzadas, también puedes investigar otras funciones de la API de Windows, como la gestión de archivos, procesos o la interacción con otros dispositivos del sistema.

Etiquetas:
cpp windows
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer