Keyboard 是否可以使用FreePascal测试是否按下了特定键?

Keyboard 是否可以使用FreePascal测试是否按下了特定键?,keyboard,freepascal,Keyboard,Freepascal,我希望能够编写一个FreePascal函数,例如: function KeyIsPressed(ch: char): boolean; 当且仅当在执行时按下与字符ch对应的键时,返回true。此函数应允许构造,例如: if KeyIsPressed('a') and KeyIsPressed('b') and not KeyIsPressed('c') then ... 显然,当且仅当同时按下“a”和“b”且未按下“c”时,返回true 仅供参考,我正在运行: Free Pascal Com

我希望能够编写一个FreePascal函数,例如:

function KeyIsPressed(ch: char): boolean;
当且仅当在执行时按下与字符
ch
对应的键时,返回true。此函数应允许构造,例如:

if KeyIsPressed('a') and KeyIsPressed('b') and not KeyIsPressed('c') then ...
显然,当且仅当同时按下“a”和“b”且未按下“c”时,返回true

仅供参考,我正在运行:

Free Pascal Compiler version 3.0.4+dfsg-18ubuntu2 [2018/08/29] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
PS1:我不在乎键盘缓冲区是否开始填满,一个问题可以在以后单独处理


PS2:我确实注意到关于其他编程语言的类似问题,但不幸的是,这些问题对Pascal没有用处

只需看看Crt和/或键盘单元的实现。他们做那些事。但他们从已经“煮熟”的stdin中捕获键盘数据


很难回避这个问题。要了解哪些键盘组合很难实现,请尝试textmode IDE的“教学键”功能,该功能基本上显示“键盘”单元功能

谢谢您的回答。实际上,单元“keyboard.pp”似乎通过标准输入读取键盘,并使用命令
fpRead(StdInputHandle,InBuf[InHead],i)
,因此它可能无法帮助现场确定是否按下了给定的键。几年前我用Basic编程,你可以说
peek(正确的内存地址)
然后看看答案!但我想今天的事情要复杂一点,不是吗?那是在旧的Dos中,它实际上是单任务的,支持有限的硬件,并且有很多技巧来做你自己的驱动程序。老实说,我很高兴那些日子已经过去了,但是*nix终端的情况也不理想。检测按键上升和按键下降在很大程度上取决于操作系统。如果您在终端环境中工作,fpread将为您提供keydown(使用repeat reate),直到出现keydup。您可以在主循环中使用keypressed来检查键是否被按下,阅读它,如果它不是您想要的,则忽略它。。。正如马可在终端中所说的,你们应该切换到原始模式,以避免等待回车键被按下,从而从终端中的键盘缓冲区中读取你们的按键。。。