.NET

2010-06-25 9 views
6

में एक कंसोल ऐप में फ़ंक्शन कीप्रेस (F1..F12) को कैसे भेजें I सी # में एक विंडो वाला .NET ऐप लिख रहा हूं, जो प्रोसेस क्लास के माध्यम से तीसरे पक्ष कंसोल एप्लिकेशन को चलाता है, जितना संभव हो सके छुपाएं (CreateNoWindow , रीडायरेक्ट मानक मानक, आदि)।.NET

मैंने इसे मानक इनपुट रीडायरेक्ट कर दिया है, इसलिए मैं जो भी स्ट्रिंग चाहता हूं उसे लिख सकता हूं, लेकिन फ़ंक्शन कुंजियां या अन्य प्रकार की विशेष कुंजी नहीं, क्योंकि उनके पास चरित्र प्रतिनिधित्व नहीं है। मेरे लिए, मुझे कंसोल ऐप में F1 को F4 को कुंजी भेजनी है। जिन समाधानों को मैंने पाया है वे खिड़की वाले ऐप (पोस्टमेसेज, सेंड मैसेज) के लिए हैं।

मैं अपने कंसोल एप्लिकेशन के लिए यह कैसे कर सकता हूं?

प्रक्रिया के हैंडल के साथ कुछ करने के लिए कुछ है?

उत्तर

0

Sendkeys.SendWait आपकी समस्या का समाधान हो सकता है।

+0

SendKeys केवल सक्रिय एप्लिकेशन को कीस्ट्रोक भेज सकता है, दुर्भाग्य से यहां मामला नहीं है। – ifroz

0

SendKeys काम करता है ("{F1}")? (कंसोल को सक्रिय होना होगा, यद्यपि)।

+1

कंसोल स्वयं खिड़की (Process.CreateNoWindow) के रूप में भी मौजूद नहीं है, इसलिए SendKeys इस मामले में लागू नहीं है। – ifroz

1

आप नहीं कर सकते। फंक्शन कुंजियां stdin के साथ काम नहीं कर सकती हैं, एक ऐप को उन्हें पहचानने में सक्षम होने के लिए ReadConsoleInput() को कॉल करना होगा। कंसोल विंडो के बिना प्रक्रिया शुरू करने पर यह अब काम नहीं करता है।

+0

कुछ डेटा को बफर में पढ़ने के लिए कोई तरीका नहीं है, क्या वहां है? – ifroz

+0

कोई कंसोल विंडो नहीं == कोई बफर नहीं। –

+0

मैं यह जवाब नहीं खरीद रहा हूँ। जब मैं CTRL-BREAK दबाता हूं तो मेरा एप्लिकेशन समाप्त हो जाता है, फिर भी इसके पास ReadConsoleInput को ऐसा कोई कॉल नहीं है, जिससे संभवतः इसके साथ कुछ भी करने की आवश्यकता न हो। चूंकि कमांड कंसोल में प्रक्रिया शुरू करने की क्षमता है, और इसके लिए एक ब्रेक सिग्नल भेजता है, इसलिए मुझे कोई कारण नहीं दिख रहा है कि कोई अन्य एप्लिकेशन जो प्रक्रिया शुरू करता है, उसी तरह का सिग्नल नहीं भेज सकता है। – Triynko

0

यह सीधे आपके प्रश्न का उत्तर नहीं है, लेकिन क्या आपने एमएसएमक्यू का उपयोग करने पर विचार किया है?

यदि आपका खिड़की वाला एप्लिकेशन उन कुंजी-प्रेस प्राप्त कर सकता है, तो यह एमएसएमक्यू का उपयोग करके उस तथ्य को आपके कंसोल एप्लिकेशन पर भेज सकता है। आपको वास्तव में कुंजी-प्रेस को पारित करने की आवश्यकता नहीं हो सकती है, केवल यह तथ्य कि उन्हें दबाया गया था।

मुझे यह techrepublic article एमएसएमक्यू काम करने की मूल बातें प्राप्त करने में मदद मिली है।