我的问题如下:
我想制作一个程序,一个简单的文本编辑器,它可以与所有键盘键一起使用,例如功能键(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值。
对“特殊键”的访问不是标准库的一部分,因为该语言不假定任何特定的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。