从Windows批处理文件中检测ANSI兼容的控制台?
发布时间:2020-12-14 01:38:11 所属栏目:Windows 来源:网络整理
导读:Windows 10控制台主机conhost.exe有 native support for ANSI escape sequences,旧版本没有.如何从批处理文件中检测是否存在控制台ANSI支持? 是否可以直接从批处理文件中调用 GetConsoleMode 或其他Windows API调用? 解决方法 您上一个问题的答案是:是的,
Windows 10控制台主机conhost.exe有
native support for ANSI escape sequences,旧版本没有.如何从批处理文件中检测是否存在控制台ANSI支持?
是否可以直接从批处理文件中调用 解决方法
您上一个问题的答案是:是的,借助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... ) 我编写了这种类型的代码,在PowerShell帮助中读取Add-Type cmdlet上的示例,以及在this question接受的答案中给出的信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |