控制台键盘命中检测和解释

时间:2011-05-02 00:11:36

标签: c++ keyboard console keypress

嘿所以我已经建议我应该使用kdhit()函数来检测控制台窗口中的按键:

“如果它是Windows,那么kbhit()函数就是你想要的那个。如果它是* nix,这里是一个kbhit()模拟器.kbhit()立即返回(没有阻塞),带有一个标志,表明存在或者是不是等待读取的键盘字符。您可以测试该标志以查看是否应该发出键盘读取。“

但是,我想知道读取密钥缓冲区或他称之为标志的最简单,最有希望的标准方法。有小费吗?的谢谢!

3 个答案:

答案 0 :(得分:3)

没有标准的方法可以做到这一点,因为如上所述,无法保证您的应用程序在甚至具有键盘设备的计算机上运行,​​以及即使在的情况下如何执行这样的用户界面功能是键盘因平台而异。

在那个分数上,谁告诉你kbhit()是Windows功能的人误导了你。 kbhit(), getch() and their relatives are actually part of the (C language bindings to the) MS-DOS API.他们在OS / 2,Win32和其他C / C ++编译器的运行时库中的存在只是 MS / PC / DR-DOS程序的移植辅助。库将它们映射到用于访问键盘的任何 native 机制(如果有的话),并且通常仅以正确的方式用于TUI,而不是GUI,应用程序访问键盘。

如果您正在编写新的TUI应用程序,请不要使用MS-DOS API。为您正在定位的平台使用正确的原生API,例如Win32 Console APIOS/2 Console APIPOSIX General Terminal Interface(通过ncurses或其他类似)。

答案 1 :(得分:1)

非常有用的是GetAsyncKeyState

检查出来 http://msdn.microsoft.com/en-us/library/ms646293%28v=vs.85%29.aspx

答案 2 :(得分:1)

使用_kbhit()测试是否按下了某个键。当它使用_getch()来获取值时。 (注意_getch()可以为特殊键返回0或0xE0,并再次为该值调用_getch()) 用于在阅读时显示字符使用_getche()。