gpt4 book ai didi

keyboard - C 中的按键按下和按键释放中断

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:36 24 4
gpt4 key购买 nike

在 Linux 上运行的简单 C 程序中,有没有办法在 while (1) 循环中捕获 KEY PRESSEDKEY RELEASED 事件从终端窗口。

如果按键被按下,

kbhit() 将返回 truegetch() 返回被按下的字符。

如何捕获 RELEASE 事件?

最佳答案

您不能以可移植的方式执行此操作。终端(以及类似 xterm 的模拟器)只为您提供按下的键,而不是释放事件。图形用户界面通常提供接收单独的新闻和发布事件的能力。

在图形环境中运行的终端仿真器将这些事件组合成单独的字符。在图形环境中读取时,这些是键符号,其中可能包含字符。除了按键事件本身的按下和释放事件之外,您还可以有 修饰符,例如 shift 修饰符、控制修饰符和元修饰符,它们是单独的事件。如果你运行 xev ,您可以看到这些单独的事件。

将这些事件组合成一个字符后,终端仿真器可能会将其作为一系列数据字节发送到您的应用程序,例如,以 UTF-8 编码。当您使用 getch() ,ncurses 库读取这些字节,并将它们再次组合成一个字符。在这两者(终端仿真器和应用程序)之间是伪终端和它的翻译,终端仿真器和应用程序都必须操作它们。

如果您在图形环境中运行,除了图形应用程序(例如 xev 可以直接读取按键/释放之外,还有(并非总是)其他方式事件。 Linux 控制台支持这一点。例如,参见 Receiving key press and key release events in Linux terminal applications? 中引用的链接

关于keyboard - C 中的按键按下和按键释放中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33581030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com