• Domingo 22 de Diciembre de 2024, 13:02

Autor Tema:  Como Atrapar Una Presion De Teclado C# De Consola  (Leído 3580 veces)

jcSharp

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Como Atrapar Una Presion De Teclado C# De Consola
« en: Viernes 11 de Febrero de 2005, 01:42 »
0
Saludos a todos.  
tengo algo de tiempo programando en C#  y ahora estoy experimientando con las aplicaciónes de tipo consola (es decir, como programar en ms-dos).


resulta que estoy haciendo un video juego,  pero resulta que tengo un ciclo while
del cual me tengo que salir cuando presione cualquier tecla (es decir, con solo presionar el teclado).

y resulta que con :
   Console.ReadLine()      
// no es posible, porque no puedo meterlo dentro del do-while

algo así
do
{



}
while (presionar cualquier tecla);


en turbo C y leguajes tipos c se utiliza una funcion llamanda  "kbhit"  pero aqui eso no existe.

agradeceré alguien me pueda ayudar.


PD.  espero tambien ayudarte si tienes problemas despues.



Gracias.

VanessaV

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Como Atrapar Una Presion De Teclado C# De Consola
« Respuesta #1 en: Viernes 11 de Febrero de 2005, 18:47 »
0
Y si intentas algo así :

string var = Console.ReadLine();
while(var != null)
{
     //Código que se ejecutaría mientras no sea nula la variable
}

Espero te sirva....   :hola:

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Como Atrapar Una Presion De Teclado C# De Consola
« Respuesta #2 en: Sábado 12 de Febrero de 2005, 15:30 »
0
Eso lo puedes lograr invocando rutinas de la API de windows, en el ejemplo que te he colocado puedes ver como usar la API desde C# (aunque algunas cosas obviamente no estan alli... tendras que preguntar sino lo logras hacer)  con estos ajemplos ya puedes hacerte una idea y utilizar la api para lo que quieres realizar...

<!--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;
using System.Runtime.InteropServices;

namespace Engine_Estados
{
    public class Entrada_class
    {
        #region Llamado a funciones de la API

            [DllImport("kernel32", SetLastError=true)]
            static extern IntPtr GetStdHandle(IntPtr whichHandle);
            [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);

        #endregion

        #region Variables para manejo de la API

            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;
        #endregion


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

        ~Entrada_class()
        {
            SetConsoleMode(hConsoleHandle, modo);
        }
        
        public int Leer()
        {
            return Console.Read();
        }
    
        public void Leer(char  car)
        {
            while(Console.Read() != car);
        }

        public int Leer(bool modoNormal)
        {
            int ret;
            if(modoNormal)
            {
                SetConsoleMode(hConsoleHandle, modo);
                ret = Console.Read();
                SetConsoleMode(hConsoleHandle, nmodo);
            }
            else
                ret = Console.Read();
            return ret;
        }
    }
}
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
Ahora si yo fuera tu usaria mejor alguna libreia como DirectX, especificamente DirectInput para poder hacerlo más facilmente y porque ademas incorporan muchas otras funcionalidades que te pueden ser de utilidad.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

jcSharp

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Como Atrapar Una Presion De Teclado C# De Consola
« Respuesta #3 en: Jueves 17 de Febrero de 2005, 01:16 »
0
;)

Orale,  excelente tocayo (asi se le llama en  méxico a las personas con el mismo nombre de uno).

Actualmente bajé una librería que utiliza puras API's,   llamada xConsole    que aparte enriquecí agregandole varios métodos mas :-),    voy a buscar un API que me permita hacer una interrupción al teclado,  

sabes que algun sitio donde pueda investigar las API's??  

o donde puedo encontrar todos los métodos de kernel32.dll ?


muchas gracias Juan Carlos y si necesitas ayuda, preguntame y a lo mejor entre los dos le encontramos,  Saludos :-).

Atte.
Juan Carlos Vazquez
---------------------------
Ing. en Sistemas Computacionales
México

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Como Atrapar Una Presion De Teclado C# De Consola
« Respuesta #4 en: Jueves 17 de Febrero de 2005, 02:28 »
0
Citar
voy a buscar un API que me permita hacer una interrupción al teclado,
Lamentablementa a travez de C# no lo puedes hacer, de ehcho con ningun lenguaje lo puedes hacer si estas en versoines de Windows ba<sadas en win32, solo puedes hacer eso en sistemas derivados del DOS, ya que los niveles de proteccion del sistema operativo no permiten cceder hoy dia a ese tipo de recursos... pues para ello esta la API, para ocultar la complejidad del hardware y de las capas bajas del sistema operativo, en todo caso si encuentras algo me cuentas, aunque no creo que encuentres nada.
Citar

sabes que algun sitio donde pueda investigar las API's??
NO, pero lo que pasa es que hablar de una API a mi manera de verlo es algo como medio 'abastracto' ya que una APi no es más que una libreria comun y corriente, pero se supone que hace muchisimas cosas y hace ver faciles las cosas dificiles.
Citar
o donde puedo encontrar todos los métodos de kernel32.dll ?

En la pagina de msdn pero debes buscar como acceso a la pai de windows o platform SDK, generalmente ese tipo de infromacion se encuentra en las ayudas de las librerias.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io