2010-06-16 17 views
11

हाय मुझे कंसोल पर लिखना है, लेकिन अगर मैं अपने प्रोग्राम में कंसोल लिखता हूं और कमांड लाइन से अपना प्रोग्राम कॉल करता हूं तो यह कुछ भी प्रदर्शित नहीं करेगा।मैं एक डब्ल्यूपीएफ आवेदन से कमांड लाइन कैसे लिखूं?

मैं इसे कैसे बना सकता हूं ताकि जब मैं कंसोल कहूं। राइटलाइन या कंसोल.ऑट। राइटलाइन आईआर कमांड प्रॉम्प्ट पर प्रिंट करता है जिससे इसे कहलाया गया था और कहीं और नहीं?

एक बार फिर मुझे पता है कि कंसोल कैसे करें। राइटलाइन इसलिए यह नहीं है :- जब तक कि मैं इसे गलत नहीं कर रहा हूं।

क्या मैं इसे बता सकते हैं शायद Console.SetOut (TextWriter टी)

यह एक WPF अनुप्रयोग है और मैं इसे कमांड लाइन करने के लिए अपने डेटा पोस्ट करने के लिए, जबकि अभी भी स्टार्टअप पर जीयूआई को बनाए रखना की जरूरत के साथ क्या करना कुछ । मैंने ट्रिपल चेक किया है और मेरा कोड प्रिंट लाइनों को हिट करता है, मैं वास्तव में विजुअल स्टूडियो आउटपुट विंडो पर मुद्रित लाइनों को देख सकता हूं, जब मैं मैन्युअल रूप से वीएस के बिना इसे चलाता हूं तो यह कमांड लाइन में प्रदर्शित नहीं होगा।

यदि संभव हो तो मुझे सशर्त रूप से कंसोल डिस्प्ले होना चाहिए। यानी यदि कमांड लाइन से चलाएं (या कमांड तर्क के साथ भी), प्रॉम्प्ट पर प्रदर्शित या पोस्ट करें, अन्यथा नहीं।

+1

आप कुछ और कोड कृपया जोड़ सकते हैं? –

+0

यह काम करना चाहिए, अधिक जानकारी/कोड –

+0

ठीक है। मैं अपनी स्ट्रिंग "हेल्पस्ट्रिंग" में आयोजित कमांड लाइन में सहायता जानकारी के साथ एक स्ट्रिंग मुद्रित करना चाहता हूं। कंसोल। राइटलाइन (हेल्पस्ट्रिंग); यह स्ट्रिंग को कमांड प्रॉम्प्ट पर आउटपुट नहीं करेगा अगर मैं इसे खोलता हूं, मेरे निष्पादन योग्य पर नेविगेट करता हूं, और इसे चलाता हूं। जहां तक ​​मुझे पता है, यह कहीं और आउटपुट प्रिंट करना होगा। तो मैंने कंसोल क्लास 'SetOut विधि का उपयोग करने का प्रयास किया लेकिन मुझे नहीं पता कि स्ट्रीमवाइटर कहां प्राप्त करें जो कमांड प्रॉम्प्ट पर लागू होगा। वास्तव में उससे अधिक कोड नहीं है। यह एक WPF परियोजना है जो मदद करता है। – ben

उत्तर

0

"विंडोज एप्लिकेशन" के बजाय प्रोजेक्ट प्रकार को "कंसोल एप्लिकेशन" पर सेट करें । यह एप्लिकेशन को कंसोल से अटैच करने का कारण बनता है, जिससे इसे लॉन्च किया गया था (या यदि कोई पहले से नहीं था तो कंसोल बनाएं)।

+3

क्या यह सशर्त रूप से करने का कोई तरीका है? जैसे कि प्रक्रिया कमांड लाइन से चलाया गया था, यह कमांड लाइन से जुड़ा हुआ है लेकिन अन्यथा यह नहीं होगा? – ben

+0

बेन, मैंने कभी ऐसी चीज नहीं सुना है लेकिन यह एक अच्छी चाल होगी। मुझे लगता है कि आप मूल प्रक्रिया का पता लगाने में सक्षम हो सकते हैं, जो कंसोल विंडो होगी। –

+1

@ben: कोई आसान तरीका नहीं है - हालांकि, जोनाथन का दृष्टिकोण सबसे अधिक काम करेगा। आपको कॉलिंग कंसोल की प्रक्रिया आईडी के साथ अटैचकंसोल को कॉल करने की आवश्यकता होगी। देखें: "?" Http://msdn.microsoft.com/en-us/library/ms681952(VS.85).aspx –

0

यह आपके द्वारा किए गए कार्यों को ठीक, डबल और ट्रिपल चेक करना चाहिए और यदि संभव हो तो अपना कोड पोस्ट करें। आप प्रोजेक्ट गुणों में एक नज़र डाल सकते हैं और आउटपुट प्रकार को 'कंसोल एप्लिकेशन' पर सेट कर सकते हैं (मुझे विश्वास है कि इसे वैसे भी कहा जाता है: ओपी)

+0

यह एक डब्ल्यूपीएफ एप्लीकेशन है और मुझे स्टार्टअप पर जीयूआई को बनाए रखने के दौरान इसे अपने डेटा को कमांड लाइन पर पोस्ट करने की आवश्यकता है। मैं ट्रिपल देख लिया है और मेरे कोड प्रिंट लाइनों मारता है, मैं वास्तव में देख सकते हैं लाइनों दृश्य स्टूडियो उत्पादन विंडो पर मुद्रित किया जा रहा है, यह सिर्फ कमांड लाइन में प्रदर्शित नहीं होगा जब मैं इसे मैन्युअल बनाम बिना चला – ben

+0

बेन इन सभी टिप्पणियों में प्रश्न के लिए प्रासंगिक जानकारी है, कृपया आप इस जानकारी को प्रश्न में जोड़ सकते हैं। धन्यवाद। –

+0

मैंने अतिरिक्त जानकारी को दर्शाने के लिए प्रश्न अपडेट किया है। उसके लिए माफ़ करना। – ben

29

यह वास्तव में तुच्छ है:

public void WriteToConsole(string message) 
{ 
    AttachConsole(-1); 
    Console.WriteLine(message); 
} 
[DllImport("Kernel32.dll")] 
public static extern bool AttachConsole(int processId); 

इस विधि कंसोल के लिए अपने संदेश लिखेंगे यदि आपके प्रोग्राम कमांड लाइन से शुरू किया गया था, अन्यथा यह कुछ भी नहीं होगा।

आप एक विकल्प के उत्पादन प्रणाली का उपयोग करने के लिए जब आप कमांड लाइन आप इसे इस तरह से कर सकते हैं से शुरू नहीं कर रहे थे चाहते हैं:

public void WriteToConsole(string message) 
{ 
    _connected = _connected || AttachConsole(-1); 
    if(_connected) 
    Console.WriteLine("Hello"); 
    else 
    ... other way to output message ... 
} 
bool _connected; 
[DllImport("Kernel32.dll")] 
public static extern bool AttachConsole(int processId); 
+2

अच्छा है। मेरे पास एक छोटा मुद्दा था जहां कमांड लाइन से चलने पर कंसोल विंडो (सत्र?) बाहर नहीं निकलती है। इसे जोड़ने से इसका ख्याल रखा: "SendKeys.SendWait (" {ENTER} ");"। मैंने FreeConsole() को भी एक कॉल जोड़ा। –

+0

बहुत बढ़िया। धन्यवाद। – Dennis

+1

यह अच्छा है, लेकिन आप इसे कैसे प्राप्त करते हैं ताकि कमांड लाइन प्रॉम्प्ट वापस आ जाए? जो मुझे मिलता है वह संकेत है, तो कंसोल लिखा जाना शुरू होता है, इसलिए अंतिम उपयोगकर्ता c: \> प्रॉम्प्ट के साथ नहीं छोड़ा जाता है। –

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