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.
A continuación, exploraremos algunas de las funciones más comunes que nos permiten obtener datos del sistema en un entorno Windows utilizando C++.
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.
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.
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.
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.
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.
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.
Jorge García
Fullstack developer