如何使用键盘的特殊键,例如Command / Shift,Alt,Tab或C / C ++程序中的功能键?

问题描述 投票:0回答:1

我的问题如下:

我想制作一个程序,一个简单的文本编辑器,它可以与所有键盘键一起使用,例如功能键(F1至F12),命令,左移,ALT或TAB。

更确切地说,我希望能够将所有键分配给特定的操作。

我已经制作了一个程序来打印那些键的ASCII值,但是这些键并没有按照我的意愿接受,我的测试程序会打印出几个ASCII码的值或者不接受它们,就像通过按Command键,而不是:

我的测试程序,用于打印出所按下键的ASCII值:

#include <stdio.h> 

int main (void)
{
    char k;

    printf("\n\n\n\n");

    while(1)
    {

       printf("Please press any key:");

       k = getchar();
       getchar();

       printf("ASCII code of given input key: %d",k);
       printf("\n\n\n");
    }
}

按F2-键后的输出:

Please press any key:^[OQ
ASCII code of given input key: 27


Please press any key:ASCII code of given input key: 81

按F2-键后的输出:

Please press any key:^[[15~
ASCII code of given input key: 27


Please press any key:ASCII code of given input key: 49


Please press any key:ASCII code of given input key: 126

按Command,Alt或左Shift键后的输出:

Please press any key:               // no reaction at all

由于事实,我认为这必须很容易完成,因为在程序中使用键盘的所有键当然是正常的,对于我来说,作为一个新手,要找到正确的方法并不容易。实现。

我在Stackoverflow上找到了这个问题,但它属于C#:Special keys on keyboards

为什么我无法获取这些键的ASCII值?

对不起,如果我可能会误以为这些键属于ASCII值。

c++ c keyboard keyboard-shortcuts keyboard-events
1个回答
1
投票

对“特殊键”的访问不是标准库的一部分,因为该语言不假定任何特定的I / O硬件,例如屏幕和键盘,它仅假定基于标准字符的I / O流,并且这些数据基于流与字符有关,与键无关。

这样接收键盘事件和扫描代码以及特定于平台。但是,通过跨平台的方式,您可以跨支持键盘的系统(例如台式计算机-并非C所运行的所有东西都是台式计算机)获得一些通用性。

例如,对于文本控制台应用程序,例如您的示例,您可以使用ncurses库,它是Unix curses库的一个克隆,并且在PDcurses库中具有与Windows相当的Windows。

例如,在这些curses变体中,您可以编写:

int ch = getch() ;
if(ch == KEY_LEFT)
    printw("Left arrow is pressed\n");

在引擎盖下,它是平台特定工具的包装。如果跨平台不是问题,则可以直接使用这些方法。例如,MSVC ++有一个conio库,该库具有与上面类似的_getch()函数,除了非字符键之外,它返回0x00或0xE0,并在第二次调用时返回键代码。

对于GUI应用程序,应用程序消息循环将接收键盘事件,确切的方式将因系统而异,但是同样存在跨平台的解决方案,例如Qt或WxWidgets。

© www.soinside.com 2019 - 2024. All rights reserved.