2011-08-21 12 views
12

को संभाल नहीं करता है, मेरी स्थिति यहां है: हम एक ऐसा एप्लीकेशन लिख रहे हैं जो माइक्रोसॉफ्ट किनेक्ट को कीबोर्ड और माउस इवेंट में समन्वयित करना होगा।सी # में किसी अन्य एप्लिकेशन पर कीबोर्ड ईवेंट भेजना जो विंडोज इवेंट

जब हमें माउस पर नियंत्रण लेने की आवश्यकता होती है, तो सबकुछ काम करता है जैसा कि हम किसी भी प्रकार के आवेदन में करते हैं। समस्या तब उत्पन्न होती है जब हमें उन अनुप्रयोगों के लिए कीबोर्ड ईवेंट (जैसे कुंजी डाउन या की अप) भेजने की आवश्यकता होती है जो उदाहरण के लिए विंडोज़ ईवेंट, जैसे गेम को संभाल नहीं पाती हैं।

हमने .NET फ्रेमवर्क के SendKeys क्लास की कोशिश की, और यह केवल विंडोज अनुप्रयोगों के साथ काम करता है। जब एप्लिकेशन आधा जीवन या डूम जैसा गेम होता है तो हम एक ही प्रभाव नहीं प्राप्त कर सकते हैं। तो, यह मेरा प्रश्न है: हम इन अन्य अनुप्रयोगों में प्रभावी रूप से कीबोर्ड ईवेंट कैसे भेज सकते हैं?

+1

आप DirectInput मतलब ? – SLaks

+0

मुझे नहीं पता, मैं एक सी # नोब हूं :) –

+0

हाँ डायरेक्ट इनपुट ऐसा कारण होगा कि ऐप्स 'सामान्य' नहीं हैं। –

उत्तर

3

आप SendInput का उपयोग कर इनपुट अनुकरण करने के लिए की जरूरत है। SendMessage और SendKeys विंडोज संदेशों के स्तर पर काम करते हैं - लेकिन डायरेक्टएक्स ऐप्स पारंपरिक संदेश लूप नहीं चलाते हैं।

PInvoke.NET पर एक पृष्ठ है, लेकिन मुझे कबूल करना है, मैंने इसका उपयोग करने की कोशिश नहीं की है।


GameDev.net साइट है, जहाँ किसी को "शुरुआती" मुद्दों है कि विशेष रूप से सामना किया जा सकता एक DirectInput आधारित एप्लिकेशन के साथ सहभागिता से कुछ के साथ काम किया है पर भी this thread देखें।

+1

पहले से ही कोशिश की, काम नहीं किया। :( यही कारण है कि मैंने इस प्रश्न पर एक बक्षीस खोला। –

+0

@Kico - Gamedev.net धागे के अनुसार मैंने लिंक किया है, आपको वर्चुअल कुंजी के बजाय स्कैनकोड भेजना होगा। क्या आपने कोशिश की है? –

0

आपको Winapi sendmessage को PInvoke करने की आवश्यकता है।

http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx

http://pinvoke.net/default.aspx/user32.SendMessage

यह मैं क्या उपयोग कर रहा हूँ है। यह काम करता है लेकिन आपको इसके बारे में थोड़ा सा पढ़ना होगा। यह बहुत शक्तिशाली तरीका है।

+0

SendMessage एक अच्छा समाधान नहीं है :( पहले से ही कोशिश की है और जैसा कि मैं चाहता था काम नहीं किया। इनपुट सिम्युलेटर के रूप में, यह गेम अनुप्रयोगों में इनपुट नहीं भेजता था। :( –

0

यह एक त्वरित और आसान समाधान है जिसका मैं उपयोग कर रहा हूं। अच्छा काम करता है।

InputSimulator

+0

अल्राडी ने कोशिश की :( ठीक काम करता है "पारंपरिक" विंडोज अनुप्रयोग, लेकिन "हाफ-लाइफ" या "डूम" जैसे अनुप्रयोगों में इनपुट भेजते समय यह काम नहीं करता है। –

2

दुर्भाग्यवश डायरेक्टएक्स में अंतर्निहित हुकिंग कार्यक्षमता नहीं है; हालांकि aresome (यह एक दूसरे पर एक नेट रैपर है) libraries वहां ऐसा कर सकता है। आपको XInput में भी देखना होगा, जो डायरेक्ट इनपुट को हटा देता है।

+0

क्या मुझे इसे बदलने की ज़रूरत है लक्ष्य आवेदन का कोड? –

+1

नहीं, हुकिंग के इस रूप का विचार यह है कि आप ऑब्जेक्ट को ऑब्जेक्ट बनाने का मौका देने से पहले एप्लिकेशन में अपना कोड इंजेक्ट करते हैं। यह नया कोड आपकी ऑब्जेक्ट बनने का कारण बनता है। यही कारण है कि इसे सी/++ में होना चाहिए (लेकिन वहाँ एक नेट रैपर है) यह भी याद रखें कि इस प्रकार की हुकिंग धोखा मॉनीटर (जैसे पंक बस्टर) को बिल्कुल बोनर बनाती है। –

1

मैं पद निम्नलिखित आपके प्रश्न का उत्तर होना चाहिए लगता है,

How do i send keys using a global keyboard hook?

जवाब के अनुसार, आप, SendInput समारोह के लिए महत्वपूर्ण कोड निम्न का उपयोग करने के लिए है http://www.gamespp.com/directx/directInputKeyboardScanCodes.html

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