| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1165 人关注过本帖
标题:关于键盘若干个键不能识别的问题
只看楼主 加入收藏
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:5 
关于键盘若干个键不能识别的问题
我用getch()函数读取键盘,但是发现CTRLshiftwin键和Caps Lock和 Num Look等不能识别。请问如何识别这些键呢?

程序代码:
#include <stdio.h>
#include <conio.h>

void main(void)
{
    int ch, scan;

    do {
        ch = getch();    /* 1st getch() gets ASCII code */
        printf("Character is %d\n", ch);
           if (ch == 0x00 || ch == 0XE0)  { /* if extended key */
            scan = getch();  /* 2nd getch() gets "scan code" */
            printf("\tExtended character:  scan is %d\n", scan);
        }
    }  while (ch != 27);    /* exit loop on ESC */
}
搜索更多相关主题的帖子: 键盘 如何 
2017-03-15 21:49
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10558
专家分:42996
注 册:2014-5-20
收藏
得分:10 
windows环境可用 WH_KEYBOARD_LL 消息,或 WH_KEYBOARD_LL HOOK(钩子)。

2017-03-15 23:11
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10558
专家分:42996
注 册:2014-5-20
收藏
得分:0 
如果只是检测虚拟键的状态(DOWN、UP等),可用API GetKeyState()、GetAsyncKevState()、GetKeyboardState()和SetKeyboardState()。
2017-03-16 05:56
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:0 
回复 3楼 吹水佬
这些API都在函数都在哪里?什么地方能知道它的使用方法?

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-03-16 10:03
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10558
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用Alien_Lee在2017-3-16 10:03:04的发言:

这些API都在函数都在哪里?什么地方能知道它的使用方法?

#include <stdio.h>
#include <windows.h>
main()
{
    SHORT key;
    while (!GetAsyncKeyState(VK_ESCAPE))
    {
        if (GetAsyncKeyState(VK_NUMLOCK) != 0)
            printf("Num Lock 按下\n");
        key = GetKeyState(VK_NUMLOCK);
        if (key==1)
            printf("Num Lock 开\n");
        else if (key==0)
            printf("Num Lock 关\n");
        Sleep(1000);
    }
}
2017-03-16 10:40
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10558
专家分:42996
注 册:2014-5-20
收藏
得分:0 
用 API ReadConsoleInput() 得到键盘虚拟键码:
#include <stdio.h>
#include <windows.h>
main()
{
    HANDLE hIn;
    INPUT_RECORD InRec;
    DWORD NumRead;
    WORD VKey = 0;
    hIn = GetStdHandle(STD_INPUT_HANDLE);
    while (VKey != VK_ESCAPE)
    {
        if (ReadConsoleInput(hIn, &InRec, 1, &NumRead))
        {
            if (InRec.EventType == KEY_EVENT)
            {
                if (InRec.Event.KeyEvent.bKeyDown == 0)
                {
                    VKey = InRec.Event.KeyEvent.wVirtualKeyCode;
                    printf("%d\n", VKey);
                }
            }
        }
    }
}
2017-03-16 16:21
快速回复:关于键盘若干个键不能识别的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019573 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved