30 oct 2010

Emulación getch

Muchas veces os habrán dicho que eviteis getch por no usar conio que es una libreria anticuada y obsoleta que no todos los compiladores la tienen por defecto, puedes usar getchar() que es una función estándar que consigue un caracter desde stdin.

Y getch es una función, como ya he dicho, no-estandar que consigue un caracter por el teclado y sin hacer eco en pantalla.

Con esta simple función podreis usar getch sin necesidad de usar conio.

#include <windows.h>

int getch(void)
{
int car;
DWORD leidos, modo;

GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &modo);
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo & !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT);
ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &car, 1, &leidos, NULL);
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo);
return 0;
}

4 comentarios:

  1. Que nice!!! Mil gracias!!! Llevaba buen rato buscando una implementacion limpia para getch!

    ResponderEliminar
  2. Gracias a ti por comentar ;)

    ResponderEliminar
  3. Por cierto, una dudota, no deberías retornar car en vez de 0???

    Lo puse así en mi código y me devuelve lo que devuelve el getch() de conio, supongo que se te debe haber pasado... :DDD

    Saludos!

    ResponderEliminar
  4. Hace lo mismo que el getch( ) de conio

    pero sin tener que implementar esa librería.

    ResponderEliminar