Die Antwort auf Ihre letzte Frage lautet: Ja, mit Hilfe von PowerShell-Code. Diese Batch-Datei zu tun, was Sie angefordert:
@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...
)
ich diese Art von Code schrieb die Beispiele in der Powershell-Hilfe auf Add-Type Cmdlets und die Info gegeben in der akzeptierten Antwort auf this question lesen.
Sie benötigen PowerShell, um eine Windows-API aufzurufen, aber Sie können PowerShell aus dem Stapel aufrufen. – SomethingDark
@SomethingDark, können Sie gute Ressourcen zum Aufruf von Windows-APIs von Powershell empfehlen? – jwfearn
Ehrlich gesagt, das einzige Mal, dass ich es jemals tun musste, hatte ich das Glück, nur Fenster zu verschieben und zu skalieren und es gelang mir, vorhandenen Code zu finden, der genau das tat, was ich brauchte, aber ungefähr so: https://blogs.msdn.microsoft.com/mattbie/2010/02/23/how-to-call-net-and-win32-methods-from-powershell-and-your-troubleshooting-packs/ – SomethingDark