zoukankan      html  css  js  c++  java
  • 控制台编程

    一 判断哪个键按下

      1 使用_getch()获取并判断(这个应该也可以判断鼠标按键处理, 不过暂时没有研究明白)

        首先用_kbhit()判断是否有键盘按下事件,如果有再用_getch()获取这个字符并进行判断.不过需要注意以下事项:

        (1)这个返回值是int类型

        (2)字母部分是区分大小写的, 就是说输入大写字母跟输入小写字母, _getch()返回的值是不一样的

        (3)回车是与 VK_RETURN进行比较的, 也就是0x0d

        (4)对于功能键和方向键的读取是需要调用两次_getch()的, 第一次返回0x00或者0xe0, 第二次返回按键的物理键代码(也叫扫描码). 这里需要用到一个MapVirtualKey(), 这个函数的作用是在扫描码与虚拟码之间进行转换, 上面的VK_RETURN就是虚拟码中的一个

         完整的判断代码如下:

    #include<windows.h>

    #include<conio.h>

    int ch =0;

    if (_kbhit())
    {
      ch= _getch();

      if(ch == VK_RETURN)

        // 回车键按下处理

      else if(ch == 'a')

        // 小写字母处理

      else if(ch == 'A')

        // 大写字母处理

      else if (ch == 0 || ch == 0xe0 )
      {
        ch = _getch();
        ch = MapVirtualKey(ch, MAPVK_VSC_TO_VK);
        if (ch == VK_UP)
          //向上发现键按下处理
      }
    }

      2 使用GetAsyncKeyState()函数获取

      参考自: http://blog.csdn.net/feidegengao/article/details/8528911

        if(GetAsyncKeyState(虚拟键值) & 0x8000)

        //键按下的处理事件

       注意: 

        (1) 返回值表示两个内容,一个是最高位bit的值,代表这个键是否被按下,一个是最低位bit的值,代表在上次调用, 因此在判断当前按下时, 要看最高位时候为1

        (2)字母不区分大写, 判断的时候参数一律取大写字母的asc2的值

        (3)功能键, 方向键,鼠标键均可以直接使用虚拟键值作为参数进行判断

        (4)类似函数的区别与联

    SHORT GetKeyState(int nVirtKey);  //从windows消息队列中取得键盘消息,返回key status

    SHORT GetAsyncKeyState(int vKey);  //直接侦测键盘的硬件中断,返回key status

    BOOL GetKeyboardState(PBYTE lpKeyState);//当从windows消息队列中移除键盘消息时,才返回key status

      3 使用控制台 api接收按键输入

        需要使用的相关函数如下:

          SetConsoleMode

          ReadConsoleInput

          GetStdHandle

  • 相关阅读:
    事务隔离级别,数据库存储过程,Mysql视图,Mysql语句
    Spring注解; Spring Bean
    Java Thread Api
    Java 年轻代、年老代、GC
    Java 线程同步方式
    HashMap
    ArrayList
    安装zabbix环境
    线上应用——高内存占用
    Python入门笔记
  • 原文地址:https://www.cnblogs.com/talenth/p/6825880.html
Copyright © 2011-2022 走看看