【问题标题】:Win32 Console -- Backspace to Last LineWin32 控制台 -- 退格到最后一行
【发布时间】:2011-07-24 14:22:14
【问题描述】:

我正在编写像 BASH 这样的命令解释器,\ 后跟换行符表示输入流的延续;如何在 Win32 中实现?

如果我使用ENABLE_LINE_INPUT 的控制台模式,那么用户不能按退格 键返回上一行; Windows 阻止他这​​样做。但是如果我不设置ENABLE_LINE_INPUT,那么我必须手动重新定位光标,这相当繁琐,因为(1)用户可能已经重定向了输入流,并且(2)它可能容易出现竞争条件,如果可以的话,我宁愿让 Windows 来做。

有什么方法可以让我的换行符也吃掉吗?


编辑:

如果这需要未记录的 CSRSS 端口请求,那么我仍然感兴趣!

【问题讨论】:

  • 这可以通过在pInputControl 参数中设置nInitialChars 来使用ReadConsole 的“Unicode”版本来完成。
  • @Amigable:是的,我很害怕... @John:嗯...我尝试将pInputControl 的值传递给ReadConsoleW,无论是否使用ENABLE_LINE_INPUT 模式,我仍然没有看到任何区别......:\
  • 为什么自己定位光标容易出现竞争条件?我问是因为如果我是你,我会走那条路。它提供了最大的控制权,但在某种意义上它在 Windows 世界中应该更容易,因为您不必考虑无数不同的终端。
  • @Amigable:因为如果在我向后移动光标时将某些内容写入流中会发生什么问题?然后我会覆盖一些东西。还有一个问题是使用向上/向下键使历史记录工作......这太乏味了,不能 100% 正确。

标签: winapi console console-application


【解决方案1】:

假设您希望它在窗口中运行,就像默认情况下的命令提示符一样,而不是全屏,您可以创建一个带有大文本框的 GUI 应用程序。用户可以在文本框中输入内容,您可以解析输入的任何内容,并输出到同一个框(有效模拟 Win32 控制台)。

这样,您想为控制台的行为设置什么规则完全取决于您。

我这样说可能是错误的,但我相信从 XP 开始的 Win32 控制台的工作方式与此完全一样,它只是侦听 stdout 上的输出;你应该没有任何理由不能这样做。

希望这对您有所帮助。

【讨论】:

  • 感谢您的建议。不幸的是,就像我在我的帖子的评论中提到的那样,the entire point of my program was to use the standard Windows terminal, since it integrates well with the rest of the system 在很多方面,并且制作一个文本框并不等同于它,因为它不是一个“本机”控制台(即它不会被识别)由操作系统作为控制台应用程序),我真的不是在寻找一种方法来欺骗用户和操作系统,让他们思考一些不正确的事情。 :(
  • 然后看看基于控制台的文本编辑器是如何工作的,因为这本质上就是你需要接受命令的方式。您必须缓冲命令,并在需要回溯一行时自己操作光标位置。
  • 是的,我担心这可能是答案...感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-07-25
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2010-11-05
  • 2012-04-21
相关资源
最近更新 更多