2010-03-25 10 views
5

संभव डुप्लिकेट:
How do I send ctrl+c to a process in c#?सी #: प्रक्रिया के साथ शुरू कंसोल प्रोग्राम को ctrl + c भेजें। स्टार्ट()?

मैं समझ नहीं एक बाहरी प्रोग्राम के लिए भेजने से Ctrl +सी अनुकरण करने के लिए कैसे। जब मैं सीएमडी के माध्यम से मैन्युअल रूप से प्रोग्राम चलाता हूं, जब मैं Ctrl + c दबाता हूं तो यह निरस्त हो जाएगा और मुझसे पूछेगा कि क्या मैं इसे पूरी तरह से बंद करने से पहले सहेजना चाहता हूं। मैं इसे सी # के माध्यम से अनुकरण करने की कोशिश कर रहा हूं लेकिन यह काम नहीं कर रहा है।

// Create new process object 
process = new Process(); 

// Setup event handlers 
process.EnableRaisingEvents = true; 
process.OutputDataReceived += OutputDataReceivedEvent; 
process.ErrorDataReceived += ErrorDataReceivedEvent; 
process.Exited += ProgramExitedEvent; 

// Setup start info 
ProcessStartInfo psi = new ProcessStartInfo 
{ 
    FileName = ExePath, 
    UseShellExecute = false, // Must be false to redirect IO 
    RedirectStandardOutput = false, 
    RedirectStandardError = false, 
    RedirectStandardInput = true, 
    Arguments = arguments 
}; 

process.StartInfo = psi; 

// Start the program 
process.Start(); 

process.StandardInput.Write("\x3"); // 0x3 is Ctrl+C according to ASCII table 

कार्यक्रम इस का जवाब नहीं है और सिर्फ जारी है:

यह अब मैं क्या कर रहा हूँ है। समस्या है जब Ctrl + कंसोल में कर रही है कि Windows वास्तव में इनपुट स्ट्रीम में Ctrl +सी नहीं भेजता है एक भेजता है प्रक्रिया के लिए "बीच में" है, लेकिन इसके बजाय? मैंने सोचा कि इनपुट स्ट्रीम में "\ x3" भेजना वास्तव में विंडोज़ करता है जब कोई Ctrl + सी कंसोल में दबाता है। क्या मै गलत हु?

+0

आपका कंसोल शायद '^ सी' को पकड़ रहा है और कार्यक्रम के लिए किसी प्रकार का संकेत भेज रहा है। आपको उस व्यवहार का अनुकरण करने की आवश्यकता है; यूनिक्स सिस्टम पर यह 'सिगिन' होगा, मुझे विंडोज़ के बारे में इतना कुछ पता नहीं है, मुझे डर है। –

+0

यह मेरे सिद्धांतों में से एक है। मुझे नहीं पता कि विंडोज पर सीएमडी मेरे प्रोग्राम को भेज रहा है (यदि यह ctrl + c नहीं है)। – johnrl

उत्तर

0

इस प्रश्न का उत्तर पूर्व अवसर पर दिया गया है जिसमें मैंने SO here पर एक विस्तृत उत्तर पोस्ट किया था।

+0

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

+0

@ जोहानल: मैंने उस पुस्तकालय को नहीं लिखा था! :) कि किसी और ने लिखा था! :) लेकिन मैंने इसे एक परीक्षण रिग में शामिल किया जैसा कि यह साबित करने के लिए लिंक में दिखाया गया है कि यह काम करता है और सीधे प्रक्रिया में भेजा जा सकता है ... न कि किसी भी अग्रभूमि खिड़की ... खिड़की के हैंडल प्राप्त करके, इसका उपयोग करें उस संभाल को चाबियाँ भेजें! – t0mm13b

+0

समस्या यह है कि मेरे द्वारा शुरू किए जाने वाले प्रोग्राम में खिड़की नहीं है क्योंकि मैं अपने सभी प्रोग्राम को अपने प्रोग्राम में रीडायरेक्ट करता हूं। इसलिए खिड़कियों के लिए कुंजी भेजना काम नहीं करता है। – johnrl

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