Odpowiedź na ostatnie pytanie brzmi: Tak, za pomocą kodu PowerShell. Ten plik wsadowy zrobić co prosiłeś:
@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...
)
napisałem tego typu odczyt kodów przykłady przy pomocy PowerShell Add-Type cmdlet i informacji podanych w akceptowanych odpowiedź na this question.
Potrzebujesz PowerShell, aby wywołać interfejs API systemu Windows, ale możesz wywołać PowerShell z partii. – SomethingDark
@SomethingDark, czy możesz polecić jakieś dobre zasoby dotyczące wywoływania interfejsów API Windows z Powershell? – jwfearn
Szczerze mówiąc, gdy tylko musiałem to zrobić, miałem szczęście, że wystarczy przenieść i zmienić rozmiar okien. Udało mi się znaleźć istniejący kod, który zrobił dokładnie to, czego potrzebowałem, ale jest to coś takiego: https://blogs.msdn.microsoft.com/mattbie/2010/02/23/how-to-call-net-and-win32-methods- from-powershell-and-your-troubleshooting-packs/ – SomethingDark