C#怎么检测用户在控制台按下了某键?

我今天想用控制台做游戏来练练手,但是当我想实现角色移动的时候就不会做了,怎么检测用户按下了wasd键?

你可以创建一个winform不显示,捕获keydown事件。

也可以用下面这个方法:

必须使用Windows api,用键盘钩子函数截取键盘按键记录,然后把这个EXE程序注册为系统服务就能自动运行了,C#中键盘钩子的使用 

  

public   class   Win32Hook   
  {   
    
  [DllImport("kernel32")]   
  public   static   extern   int   GetCurrentThreadId();   
    
  [DllImport(   "user32",     
  CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]   
  public   static   extern   int   SetWindowsHookEx(   
  HookType   idHook,   
  HOOKPROC   lpfn,   
  int   hmod,   
  int   dwThreadId);   
    
  public   enum   HookType   
  {   
  WH_KEYBOARD   =   2   
  }   
    
  public   delegate   int   HOOKPROC(int   nCode,   int   wParam,   int   lParam);   
    
  public   void   SetHook()   
  {   
  //   set   the   keyboard   hook   
  SetWindowsHookEx(HookType.WH_KEYBOARD,   
  new   HOOKPROC(this.MyKeyboardProc),   
  0,   
  GetCurrentThreadId());   
  }   
    
  public   int   MyKeyboardProc(int   nCode,   int   wParam,   int   lParam)   
  {   
  //在这里放置你的处理代码   return   0;   
  }   
  }   
  使用方法   
  可以在Form的构造函数里放入   
  Win32Hook   hook   =   new   Win32Hook();   
  hook.SetHook();

追问

 看不懂,我只是个新手。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-02
static void Main(String[] args)
        {
            while (true)
            {
                ConsoleKeyInfo info = Console.ReadKey();
                switch (info.Key)
                {
                    case ConsoleKey.UpArrow:
                    case ConsoleKey.W:
                        Console.WriteLine("Up");
                        break;
                    case ConsoleKey.DownArrow:
                    case ConsoleKey.S:
                        Console.WriteLine("Down");
                        break;
                    case ConsoleKey.LeftArrow:
                    case ConsoleKey.D:
                        Console.WriteLine("Left");
                        break;
                    case ConsoleKey.RightArrow:
                    case ConsoleKey.A:
                        Console.WriteLine("Right");
                        break;
                    default:
                        Console.WriteLine(info.Key);
                        break;
                }
            }
        }

本回答被提问者采纳