2009-12-26 27 views
5

ठीक है यहाँ एक सरल कंसोल एप्लिकेशन है जिसे मैंने के RedirectStandardOutput का परीक्षण करने के लिए बनाया है।क्यों RedirectStandardOutput के पास आवश्यक एएनएसआई कोड नहीं हैं?

foreach (c In [Enum].GetValues(GetType(ConsoleColor)) 
    { 
     Console.ForegroundColor = c 
     Console.WriteLine("Test") 
    } 

और नीचे आवेदन परिणाम है।

Result of the Console Application.

तो जैसा कि हम देख सकते हैं रंग कंसोल पर खूबसूरती से प्रदर्शित करते हैं।

हालांकि, जब मैं StandardOutput.BaseStream पढ़ता हूं तो कोई रंग जानकारी नहीं होती है, कोई एएनएसआई कोड नहीं, कुछ भी नहीं।

मैं पुनर्निर्देशित स्ट्रीम पर रंग जानकारी कैसे प्राप्त करूं?

+0

मैं इस प्रश्न को तब तक खुला छोड़ रहा हूं जब तक कि कोई मुझे एक अच्छा उत्तर प्रदान न कर सके। –

उत्तर

1

संक्षिप्त उत्तर यह है कि .NET Console कक्षा द्वारा आपको दी गई धाराएं पूरी तरह से चरित्र-आधारित हैं और केवल पाठ डेटा लौटाती हैं।

विस्तारित रंग जानकारी प्राप्त करने के लिए, Win32 API ReadConsoleOutput को P/Invoke करना आवश्यक होगा। यह अन्य चीजों के साथ, प्रत्येक चरित्र के लिए रंग विशेषताओं वाले COLOR_INFO structs की एक सरणी वापस आ जाएगी। शुरू करने के लिए आप ReadConsoleOutput pinvoke.net page को देखना चाहेंगे।

+0

दुर्भाग्यवश यह नहीं है कि मैं क्या देख रहा हूं, क्योंकि ReadConsoleOutput पूरी तरह से कंसोल स्क्रीन पढ़ता है, जबकि मैं जो चाहता हूं वह रंग की जानकारी को पढ़ने में सक्षम होना है क्योंकि कंसोल प्रक्रिया stdout (और स्पष्ट रूप से stderr) को डेटा लिख ​​रही है। । –

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

  • कोई संबंधित समस्या नहीं^_^