2016-06-27 12 views
5

Windows 10コンソールホストconhost.exenative support for ANSI escape sequencesです。古いバージョンではありません。どのようにしてバッチファイルからコンソールANSIサポートの有無を検出できますか?WindowsバッチファイルからANSI互換のコンソールを検出しますか?

GetConsoleModeまたは他のWindows API呼び出しをバッチファイルから直接呼び出すことはできますか?

+1

Windows APIを呼び出すにはPowerShellが必要ですが、バッチからPowerShellを呼び出すことはできます。 – SomethingDark

+0

@SomethingDark PowershellからWindows APIを呼び出す方法については、どんな良いリソースをお勧めしますか?ます。https:/ – jwfearn

+1

は正直なところ、私が今までそれを行うために必要なてきた1時間は、私が唯一のウィンドウを移動し、サイズを変更する必要があると私は私が必要な正確に何をした既存のコードを見つけることができたが、それはこのようなものだとは十分に幸運でした/blogs.msdn.microsoft.com/mattbie/2010/02/23/how-to-call-net-and-win32-methods-from-powershell-and-your-troubleshooting-packs/ – SomethingDark

答えて

4

最後の質問に対する答えは、はい、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... 
) 

は私が追加-Typeコマンドレットとthis questionで受け入れ答えで与えられた情報にPowerShellのヘルプで例を読むこの種のコードを書きました。

関連する問題