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
由系统处理,不放在输入缓冲区中。如果输入缓冲区正在被ReadFile
或ReadConsole
读取,则其他控制键由系统处理,不会在ReadFile
或ReadConsole
缓冲区中返回。如果还启用了ENABLE_LINE_INPUT
模式,则退格、回车和换行字符由系统处理。
是不是意味着当这个标志被设置时,CTRL+C
并没有放在输入缓冲区中(因为它是由系统处理的)?还是其他情况(CTRL+C
放置在输入缓冲区中)?这个解释让我很困惑.. 谁能给我解释一下?
【问题讨论】:
您的问题是什么?文字清楚地写着“CTRL+C 由系统处理,并且没有放在输入缓冲区中”。 【参考方案1】:这意味着如果设置了ENABLE_PROCESSED_INPUT
标志,Ctrl+C将不会被放入输入缓冲区(相反,系统会处理它并发送SIGINT
向控制台中运行的进程发出信号)。
同样的行为适用于 ENABLE_LINE_INPUT
标志:如果设置了,backspace
、carriage return
和 line 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 的问题