【问题标题】:SetConsoleMode() and ENABLE_VIRTUAL_TERMINAL_PROCESSING?SetConsoleMode() 和 ENABLE_VIRTUAL_TERMINAL_PROCESSING?
【发布时间】:2016-12-10 21:06:35
【问题描述】:

根据 MSDN,SetConsoleMode() 函数的 dwMode 参数应该允许 ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x04)。

我的 Visual Studio(2013 Ultimate with Update 5)没有定义该常量。它只有这两个:

#define ENABLE_PROCESSED_OUTPUT    0x0001
#define ENABLE_WRAP_AT_EOL_OUTPUT  0x0002

ENABLE_VIRTUAL_TERMINAL_PROCESSING 被删除了吗?

我正在尝试这样使用它,以便我可以使用 VT100 转义序列来控制光标。

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwMode = 0;
GetConsoleMode(hOut, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hOut, dwMode);

有关参考,请参阅此 MSDN article

【问题讨论】:

  • Win10 SDK中添加的。您的 SDK 较旧,可能是 8.1。我假设您还需要 Win10 才能使用它。不确定,您必须尝试一下。
  • 在VS 2017中定义。感谢代码示例!

标签: c++ c windows console


【解决方案1】:

如果您的 SDK 太旧,ENABLE_VIRTUAL_TERMINAL_PROCESSING 可能无法定义。

您可以使用以下代码手动定义它:

#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif

【讨论】:

  • 我试过了,它构建了,但控制台没有按预期响应。
  • 我认为问题在于它需要一个更新的命令窗口.. 显然它现在已内置到 Windows 10 命令窗口中,而不是旧的。
  • 是的:它需要版本号为 10586 或更高版本的 Windows 10。
  • 为了增加更多的混乱,他们将支持的最低客户端写为 2000。
  • @AbhinavGauniyal - API 的 最低支持客户端是 Windows 2000。特定设置可能仅受以后的操作系统版本支持。
猜你喜欢
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2017-11-12
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多