windows - 从 Windows 批处理文件中检测与 ANSI 兼容的控制台?

标签 windows batch-file ansi-escape

Windows 10 控制台主机,conhost.exe,有 native support for ANSI escape sequences ,旧版本没有。如何从批处理文件中检测是否存在控制台 ANSI 支持?

是否可以调用GetConsoleMode还是直接从批处理文件调用其他 Windows API?

最佳答案

您最后一个问题的答案是:是的,借助于 PowerShell 代码。此批处理文件执行您的请求:

@echo off
setlocal

set /A STD_OUTPUT_HANDLE=-11
set /A ENABLE_PROCESSED_OUTPUT=1, ENABLE_WRAP_AT_EOL_OUTPUT=2, ENABLE_VIRTUAL_TERMINAL_PROCESSING=4

PowerShell  ^
   $GetStdHandle = Add-Type 'A' -PassThru -MemberDefinition '  ^
      [DllImport(\"Kernel32.dll\")]  ^
      public static extern IntPtr GetStdHandle(int nStdHandle);  ^
   ';  ^
   $GetConsoleMode = Add-Type 'B' -PassThru -MemberDefinition '  ^
      [DllImport(\"Kernel32.dll\")]  ^
      public static extern bool GetConsoleMode(IntPtr hWnd, ref UInt32 lpMode);  ^
   ';  ^
   $StdoutHandle = $GetStdHandle::GetStdHandle(%STD_OUTPUT_HANDLE%);  ^
   $ConsoleMode = New-Object -TypeName UInt32;  ^
   $null = $GetConsoleMode::GetConsoleMode($StdoutHandle,[ref]$ConsoleMode);  ^
   Set-Content ConsoleMode.txt $ConsoleMode  ^
%End PowerShell%

set /P "ConsoleMode=" < ConsoleMode.txt
set /A "AnsiCompatible=ConsoleMode & ENABLE_VIRTUAL_TERMINAL_PROCESSING"
if %AnsiCompatible% neq 0 (
   echo The console is Ansi-compatible!
) else (
   echo Ansi codes not supported...
)

我编写了这种类型的代码,阅读了有关 Add-Type cmdlet 的 PowerShell 帮助中的示例以及在 this question 接受的答案中给出的信息。 .

关于windows - 从 Windows 批处理文件中检测与 ANSI 兼容的控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38044810/

相关文章:

c++ - QSerialPort 在具有特定设备的 Windows 上无法正常工作

c++ - 将dll编译为静态库时如何处理DLL_EXPORT?

batch-file - !modified! 是什么意思?做

visual-c++ - 运行vcvars32.bat后如何重置环境

haskell - Haskell 中的终端迷宫游戏

windows - 如何使用虚拟音频设备驱动程序在 RDP session 中将音频从服务器重定向到客户端?

windows - Signalr WebSockets 无法在启用了 Websocket 协议(protocol)的 Windows Server 2012 R2 + IIS 8.5 上工作,但可以在本地开发计算机上工作(Win 10)

batch-file - chcp 65001 和 .bat 文件

pexpect - 忽略 pexpect 响应中的 ANSI 颜色

terminal - 通过 ANSI 转义序列或 X11 转义序列禁用回显并设置原始终端模式