SetConsoleMode 标志中 ENABLE_PROCESSED_INPUT 的含义

Posted

技术标签:

【中文标题】SetConsoleMode 标志中 ENABLE_PROCESSED_INPUT 的含义【英文标题】:The meaning of ENABLE_PROCESSED_INPUT in SetConsoleMode flags 【发布时间】:2012-07-09 08:14:02 【问题描述】:

在 windows API 中,有 SetConsoleMode 函数。 在模式值中,我无法理解 ENABLE_PROCESSED_INPUT 值。 MSDN 文档说

ENABLE_PROCESSED_INPUT : value (0x0001) : CTRL+C 由系统处理,不放在输入缓冲区中。如果输入缓冲区正在被ReadFileReadConsole 读取,则其他控制键由系统处理,不会在ReadFileReadConsole 缓冲区中返回。如果还启用了ENABLE_LINE_INPUT 模式,则退格、回车和换行字符由系统处理。

是不是意味着当这个标志被设置时,CTRL+C 并没有放在输入缓冲区中(因为它是由系统处理的)?还是其他情况(CTRL+C 放置在输入缓冲区中)?这个解释让我很困惑.. 谁能给我解释一下?

【问题讨论】:

您的问题是什么?文字清楚地写着“CTRL+C 由系统处理,并且没有放在输入缓冲区中”。 【参考方案1】:

这意味着如果设置了ENABLE_PROCESSED_INPUT标志,Ctrl+C将不会被放入输入缓冲区(相反,系统会处理它并发送SIGINT 向控制台中运行的进程发出信号)。

同样的行为适用于 ENABLE_LINE_INPUT 标志:如果设置了,backspacecarriage returnline feed 等字符不会放入输入缓冲区,而是由系统处理(从自动缓冲和处理行尾)。

【讨论】:

你会认为令人不安的 ENABLE_LINE_INPUT 和 ENABLE_PROCESSED_INPUT 会立即转发返回 (/r) 字符,但它只会在下一次击键后传递它。知道为什么吗? Ikanab,你找到原因了吗?【参考方案2】:

ENABLE_PROCESSED_INPUT : value (0x0001) : CTRL+C 由系统处理,不放在输入缓冲区中。

所以基本上是的,没有任何东西进入输入缓冲区,因为特殊符号由系统处理。

【讨论】:

以上是关于SetConsoleMode 标志中 ENABLE_PROCESSED_INPUT 的含义的主要内容,如果未能解决你的问题,请参考以下文章

尽管设置了标志 DOPENCV_ENABLE_NONFREE=ON,但运行 opencv 获得专利的 SIFT 和 SURF 的问题

重新配置python

STM8 AWU超低功耗模式

启用浏览器的强制暗标志时如何使 Google Docs 进入暗模式?

在 IE 11 中启用“跨域访问数据源”

请教stm32的i2c接收问题