2016-06-27 17 views
5

Windows 10 konsol ana bilgisayarı, conhost.exe, native support for ANSI escape sequences, eski sürümleri yok. Bir toplu iş dosyasından konsol ANSI desteğinin varlığı veya yokluğu nasıl algılanabilir?Windows toplu iş dosyasından ANSI uyumlu konsolu algıla?

GetConsoleMode veya diğer Windows API çağrılarını doğrudan bir toplu iş dosyasından aramak mümkün mü?

+1

Bir Windows API'sini çağırmak için PowerShell'e ihtiyacınız var, ancak PowerShell'i toplu işten arayabilirsiniz. – SomethingDark

+0

@SomethingDark, Windows API'lerini Powershell'den nasıl arayacağınıza dair iyi kaynaklar önerebilir misiniz? – jwfearn

+1

Dürüst olmak gerekirse, bir keresinde bunu yapmak için ihtiyacım vardı, sadece pencereleri taşımak ve yeniden boyutlandırmak için yeterince şanslıydım ve ihtiyacım olanı tam olarak yapan mevcut kodu bulmayı başardım, ama şu gibi bir şey: https://blogs.msdn.microsoft.com/mattbie/2010/02/23/how-to-call-net-and-win32-methods-from-powershell-and-your-troubleshooting-packs/ – SomethingDark

cevap

4

Son sorunuzun cevabı şöyledir: Evet, PowerShell kodunun yardımıyla. Bu Toplu dosya İstemiş ne:

@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... 
) 

Ben Eklenti Tip cmdlet'inin ve this question kabul cevapta verilen bilgiler PowerShell yardımıyla örneklere okuma kod bu tür yazdı.

İlgili konular