• Lunes 23 de Diciembre de 2024, 00:38

Autor Tema:  Leer Una Sola Tecla.  (Leído 3747 veces)

Acor2

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Leer Una Sola Tecla.
« en: Domingo 9 de Abril de 2006, 19:59 »
0
Para leer el teclado en C# se utiliza Console.Read o Console.ReadLine pero necesitan pulsar Intro para efectuar la lectura. ¿Como se lee un caracter por teclado en C# sin necesidad de pulsar Intro?, es decir, ¿hay algo parecido a getchar o scanf de C?. Muchas gracias.

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Leer Una Sola Tecla.
« Respuesta #1 en: Domingo 9 de Abril de 2006, 23:32 »
0
C# tiene una orientacion a responder eventos. Es decir que genera ya un ciclo de proceso de mensajes de windows. Asi que ya no tienes que hacer tu mismo el proceso de capturar esos mensajes como por ejemplo cuando se presiono una tecla. Lo que tienes que hacer es responder a esos eventos.

Claro que todo esto no se aplica a modo consola por que el modo consola de c# está pensado más para crear herramientas de automatización que permitan funcionar recibiendo un conjunto de parametros y devuelvan un resultado que se pueda parsear. Por esto que el Read y Readln están pensados más para procesar un input stream.

Funciones como getchar estaban orientadas a usarse en D.O.S, donde tenias un ciclo que iba capturando las teclas presionadas por el usuario. En cambio en windows existe un mecanismo más completo y complejo que informa de eventos, en este caso generados por el teclado y además permite saber para quien va ese mensaje, por ejemplo para saber que estas escribiendo en un textbox1 y no en el textbox2.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Leer Una Sola Tecla.
« Respuesta #2 en: Lunes 10 de Abril de 2006, 17:19 »
0
Hola, la mejor forma es haciendo uso de la apide windows, hace un triempo tuve que implementar muchas funciones de consola para un proyeco que tuve, asi que he extraido este pedacito, ojala te sirva.
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
using System.Runtime.InteropServices;
...
...
[DllImport("kernel32", SetLastError=true)]
            static extern bool GetConsoleMode(IntPtr handle, out uint mode);

[DllImport("kernel32", SetLastError=true)]
            static extern bool SetConsoleMode(IntPtr handle, uint mode);
...
...
static readonly IntPtr STD_INPUT_HANDLE = new IntPtr(-10);
private IntPtr hConsoleHandle;
const uint ENABLE_LINE_INPUT = 2;
const uint ENABLE_ECHO_INPUT = 4;
uint modo, nmodo;
...
...

public constructor()
{
  hConsoleHandle = GetStdHandle(STD_INPUT_HANDLE);
  GetConsoleMode(hConsoleHandle, out modo);
  nmodo = modo & ~(ENABLE_LINE_INPUT |ENABLE_ECHO_INPUT);
  SetConsoleMode(hConsoleHandle, nmodo);
}

~constructor()
{
  SetConsoleMode(hConsoleHandle, modo);
}


public int LeerTecla()
{
  int ret;
  SetConsoleMode(hConsoleHandle, modo);
  ret = Console.Read();
  SetConsoleMode(hConsoleHandle, nmodo);
  
  return ret:
}<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Leer Una Sola Tecla.
« Respuesta #3 en: Lunes 10 de Abril de 2006, 17:26 »
0
otra m'as sencilla que pueds hacer ahora con el  visual studio 2005 ( es decir con el  c# 3.0)



Código: Text
  1. Console.ReadKey(false);
  2.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io