如何表示c中的键(输入,移位,替代,空格等)

时间:2015-05-25 13:05:42

标签: c

我想知道如何在c编程语言中表示输入shift等键。这些键有任何二进制值吗? 因为我可以在二进制值27的帮助下表示esc键。 例如:

    int main()
{
    int x;
    char ch;

    while(1)
    {
        ch=getch();
        if(ch==27)
        {
            printf("esc key pressed");
            break;
        }
        else
        {
            printf("%c key pressed\n",ch);
        }
    }
}

在我的程序中,如果我按esc它将会中断。现在,如果我想打破任何其他键,如输入,转移,alt如何做到这一点?

2 个答案:

答案 0 :(得分:1)

这大部分都取决于平台。但是,可以使用keyboard scan codes和以下示例程序检测某些键:

#include<stdio.h>

int main()
{
    int ch;
    int ascii[10];
    int count=1;
    ch=getchar();
    ascii[0]=ch;
    while (1)       //Loop used for storing successive ASCII values
    {
        ascii[count]=getchar();
        if (ascii[count]==10) break;
        count++;
    }
    if (27==ascii[0] && 79==ascii[1] && 80==ascii[2]) printf("F1 is pressed");
    if (27==ascii[0] && 79==ascii[1] && 81==ascii[2]) printf("F2 is pressed");
    if (27==ascii[0] && 79==ascii[1] && 82==ascii[2]) printf("F3 is pressed");
    if (27==ascii[0] && 91==ascii[1] && 72==ascii[2]) printf("HOME key is pressed");
    return 0;
}

如果你想要一个更有用的例子而不必在每次击键后点击 ENTER ,你可以try disabling input buffering and enabling raw mode.

答案 1 :(得分:1)

我想知道如何表示 输入 shift 等密钥c编程语言中的 ...

正如其他人所说,这是依赖操作系统的。

此功能:

<强> short GetAsyncKeyState(int key) ;

(对于Windows编程) 可与WinUser.h中的以下#defines结合使用,以确定当前 AND 最近的状态一把钥匙:

#define VK_CLEAR          0x0C
#define VK_RETURN         0x0D //AKA enter

#define VK_SHIFT          0x10 
#define VK_CONTROL        0x11
#define VK_MENU           0x12
#define VK_PAUSE          0x13
#define VK_CAPITAL        0x14

#define VK_KANA           0x15
#define VK_HANGEUL        0x15  /* old name - should be here for compatibility */
#define VK_HANGUL         0x15
#define VK_JUNJA          0x17
#define VK_FINAL          0x18
#define VK_HANJA          0x19
#define VK_KANJI          0x19

#define VK_ESCAPE         0x1B

#define VK_CONVERT        0x1C
#define VK_NONCONVERT     0x1D
#define VK_ACCEPT         0x1E
#define VK_MODECHANGE     0x1F

#define VK_SPACE          0x20
#define VK_PRIOR          0x21
#define VK_NEXT           0x22
#define VK_END            0x23
#define VK_HOME           0x24
#define VK_LEFT           0x25
#define VK_UP             0x26
#define VK_RIGHT          0x27
#define VK_DOWN           0x28
#define VK_SELECT         0x29
#define VK_PRINT          0x2A
#define VK_EXECUTE        0x2B
#define VK_SNAPSHOT       0x2C
#define VK_INSERT         0x2D
#define VK_DELETE         0x2E
#define VK_HELP           0x2F