delphi - 控制台:中止读取或读取
问题描述
控制台Read
命令无法识别VK_ESCAPE
。使用时ReadConsoleInput
,不区分大小写。Read
/是否有足够的东西Readln
报告中止?
解决方案
- 上的文档
Read()
告诉您它是针对字符的,而不是一般的键。它也不会帮助您识别PgUp或Print。这也是它与 如此相似的原因Readln()
,不出所料,它也适用于文本,而不是按下单独的键。 - 默认情况下,控制台进程不知道“中止”是什么意思。常识(甚至未绑定到Windows)是Ctrl+C和/或Ctrl+Break终止进程。
- a
ReadConsoleInput()
也不是它的KEY_EVENT 记录不区分大小写:你再次得到键,而不是字符。这意味着您必须检查是否.dwControlKeyState
有SHIFT_PRESSED
或CAPSLOCK_ON
设置将所有键转换为适当的字符(即只有Shift+S使其成为大写 S)。
何时解释键以及何时将输入视为文本/字符由您决定。是的:Esc在使用时识别Readln()
永远不会起作用-您必须重新发明自己的Readln()
,即处理所有输入,包括您最喜欢的键,例如Esc. 这也将帮助您发现哪些键(您键入)导致哪些 VK 常量。
推荐阅读
- bash - 如何在 bash -c 命令中使用 sed
- python - 无法使用 pymupdf 搜索某些 pdf
- c++ - 我如何知道模板邻接列表中有哪些 Boost Graph 属性可用?
- sql - 在 shell 脚本中使用 sqlplus 格式化 csv 文件
- php - 如何同时使用 LIKE 和prepared statements?
- google-apps-script - 根据表单输入发送电子邮件
- javascript - 比较两个对象数组并获得差异
- flutter - 为什么我在使用 Flutter ChangeNotifierProvider 时出现内存问题?
- azure - 我的管道构建成功,但我需要在本地发生的 .xml 文件中发布结果,而不是在 DevOps 中
- python-3.x - 在 Twilio 中嵌套 if else