2016-06-27 8 views
5

विंडोज 10 कंसोल होस्ट, conhost.exe, native support for ANSI escape sequences है, पुराने संस्करण नहीं हैं। एक बैच फ़ाइल से कंसोल एएनएसआई समर्थन की उपस्थिति या अनुपस्थिति का पता कैसे लगा सकता है?विंडोज बैच फ़ाइल से एएनएसआई-संगत कंसोल का पता लगाएं?

क्या GetConsoleMode या अन्य विंडोज एपीआई कॉल सीधे बैच फ़ाइल से कॉल करना संभव है?

+1

आपको Windows API को कॉल करने के लिए PowerShell की आवश्यकता है, लेकिन आप बैच से PowerShell को कॉल कर सकते हैं। – SomethingDark

+0

@ SomethingDark, क्या आप पावरहेल से विंडोज एपीआई को कॉल करने के तरीके पर किसी भी अच्छे संसाधन की सिफारिश कर सकते हैं? – jwfearn

+1

ईमानदारी से, एक बार मुझे ऐसा करने की ज़रूरत है, मैं भाग्यशाली था कि केवल खिड़कियों को स्थानांतरित करने और आकार बदलने की आवश्यकता है और मैं मौजूदा कोड ढूंढने में कामयाब रहा जिसकी मुझे ज़रूरत थी, लेकिन यह ऐसा कुछ है: https://blogs.msdn.microsoft.com/mattbie/2010/02/23/how-to-call-net-and-win32-methods-from-powershell-and-your-troubleshooting-packs/ – SomethingDark

उत्तर

4

आपके अंतिम प्रश्न का उत्तर है: हां, पावरशेल कोड की सहायता से। यह बैच फ़ाइल आप क्या अनुरोध किया कार्य करें:

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

मैं ऐड-प्रकार cmdlet और जानकारी this question पर स्वीकार किए जाते हैं जवाब में दी गई पर PowerShell मदद पर उदाहरण पढ़ने कोड के इस प्रकार लिखा था।

संबंधित मुद्दे