miércoles, 17 de junio de 2015

38 - Tutorial de C++ en español - Screenshot (Captura de pantalla)




En este capítulo del tutorial de C++ veremos una de las formas más fáciles de realizar capturas de pantalla (Screenshot) en Windows, para esta tarea nos apoyaremos en un pequeño programa llamado nircmd.exe que nos proporciona una serie de comandos básicos aunque muy pontentes como pueden ser: escribir y borrar valores y claves en el Registro, reiniciar o apagar el ordenador, crear accesos directos de programas, apagar el monitor, modificar la configuración de la pantalla, inteactuar con las unidades del equipo (CD-ROM, USB, ...), ... y como veremos en este caso realizar capturas de pantalla.

El programa nircmd.exe no necesita instalación, simplemente lo podemos alojar en la carpeta del proyecto C++ y utilizarlo sin más.

El objetivo del programa es crear una función que nos permita agregar la configuración de la captura, tales como el número de fotógramas, tiempo (milisegundos) para la captura de cada fotograma y nombre del proyecto, el nombre del proyecto es una carpeta en la cual se irán guardando los fotogramas.

Código del programa screenshot:


#include <cstdlib>
#include <iostream>
#include <direct.h> //mkdir

using namespace std;

/* 
Descargar nircmd y alojarlo en la carpeta del proyecto:
http://www.nirsoft.net/utils/nircmd.html        
*/        

void screenshot(int loop, int time, char * project_name)
{
     /* 
     Estructura del comando: 
     nircmd.exe loop 10 1000 savescreenshot proyecto/~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png 
     */
     cout << "Iniciando captura ..." << endl;
     char cmd[1000];
     /* Crear carpeta con el nombre del proyecto */
     mkdir(project_name);
     /* Crear el comando para ejecutar nircmd y realizar la captura con la configuracion dada */
     sprintf(cmd, "nircmd.exe loop %d %d savescreenshot %s/~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png", loop, time, project_name);
     cout << cmd << endl;
     cout << "Capturando fotogramas ..." << endl;
     /* Ejecutar el comando del sistema */
     system(cmd);
     cout << "Fin de la captura." << endl;
}

int main(int argc, char *argv[])
{
    //Llamar a la función:
    screenshot(10, 1000, "captura");
    system("PAUSE");
    return EXIT_SUCCESS;
}