加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

从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支持?

是否可以直接从批处理文件中调用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...
)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读