【发布时间】: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