如何使用键盘的特殊键,如Command、Shift、Alt、Tab或C/C++程序中的功能键
How to use the special keys of the keyboard such as Command, Shift, Alt, Tab or the Function-Keys inside a C/C++-program?
我的问题如下:
我想制作一个程序,一个简单的文本编辑器,它可以使用键盘的所有键,如功能键(F1到F12(、命令、左键、ALT或TAB
更确切地说,我希望能够将所有键分配给特定的操作。
我已经制作了一个程序来打印出这些键的ASCII值,但这些键并没有像我想的那样被接受,我的测试程序打印出几个ASCII代码的值,或者不像按命令键那样全部接受:
我的测试程序打印出按下的键的ASCII值:
#include <stdio.h>
int main (void)
{
char k;
printf("nnnn");
while(1)
{
printf("Please press any key:");
k = getchar();
getchar();
printf("ASCII code of given input key: %d",k);
printf("nnn");
}
}
按下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
按下命令键、Alt键或左键后输出:
Please press any key: // no reaction at all
事实上,我认为这必须很容易做到,因为在一个程序中使用键盘的所有键当然是正常的,作为一个新手,要找到实现这一点的正确方法并不容易。
我在Stackoverflow上发现了这个问题,但它属于C#:键盘上的特殊键
为什么我不能获取这些键的ASCII值?
对不起,如果我可能有一个错误的印象,这些键属于ASCII值。
访问"特殊键"不是标准库的一部分,因为该语言不假设任何特定的I/O硬件,如屏幕和键盘,它只假设基于标准字符的I/O流,并且这些流上的数据与字符有关,而不是键。
因此,接收键盘事件和扫描代码以及特定于平台的。然而,有一些跨平台的方法可以让你在支持键盘的系统之间获得一些共性(比如台式电脑——并不是C运行的所有东西都是台式电脑(。
例如,对于文本控制台应用程序,例如在您的示例中,您可能会使用ncurses库,它是Unix curses库的克隆,并且在PDcurses中具有与Windows几乎等效的库。
例如,在这些curses变体中,您可以写:
int ch = getch() ;
if(ch == KEY_LEFT)
printw("Left arrow is pressedn");
在引擎盖下,它是平台特定手段的包装器。如果跨平台不是问题,您可以直接使用这些手段。例如,MSVC++有一个conio库,它有一个类似于上面的_getch()
函数,只是对于非字符键,它返回0x00或0xE0,并在第二次调用时返回键代码。
对于GUI应用程序,应用程序消息循环将接收键盘事件,具体方式因系统而异,但也有跨平台的解决方案,例如Qt或WxWidgets。
- 在气泡排序程序中未声明错误功能
- 反向功能超出了我的 cpp 程序的范围
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 如何在 WindowProc 处理程序中区分箭头键和数字键盘?
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 如何将我的程序添加到文件和文件夹的macOS右键单击菜单?
- 为什么我的显示功能会终止程序?
- 如何获得CMake Tools以在Visual Studio Code中编译具有C++11(或更高版本)功能的程序?
- 如何用共享库替换可执行C++程序的功能?
- 如何使用键盘的特殊键,如Command、Shift、Alt、Tab或C/C++程序中的功能键
- QCoreApplication事件循环和Windows服务控制处理程序功能
- 驱动程序功能到底是什么
- NCurses – getstr() 和功能键
- 餐厅计费程序功能
- 适用于Windows XP的版本帮助程序功能
- 检测功能键被按下的最佳方法是什么
- 如何在用户模式应用程序中执行驱动程序功能
- MFC "Hidden"还是"Default"功能键加速器?
- 检测c++控制台中功能键
- C++挂上我自己的程序功能