2012-07-29 44 views
7

मैं "गेमपैड" बनाने के बारे में कैसे जाउंगा जो डायरेक्टइनपुट अनुप्रयोगों को सामान्य गेम नियंत्रक के रूप में दिखाई देता है लेकिन इसके नियंत्रण की स्थिति वास्तव में सॉफ्टवेयर द्वारा परिभाषित की जाती है?मैं वर्चुअल गेमपैड कैसे बना सकता हूं?

उत्तर

7

एक होने का नाटक करने के लिए डिवाइस ड्राइवर लिखें।

विशेष रूप से, विंडोज डिवाइस ड्राइवर इंटरप्ट अनुरोध अनुरोध प्रोटोकॉल के माध्यम से इंटरप्ट अनुरोध कहलाते हैं - जो एक लपेटा हुआ संरचना और ड्राइवर में आंतरिक रूप से बफर का एक सेट तक उबाल जाता है।

अब अगली चीज़ आपको जानने की जरूरत है कि कई ड्राइवर वास्तव में स्तरित, या ढेर, या जो भी नाम आप उपयोग करना चाहते हैं। तो उदाहरण के लिए डिस्क ड्राइवर लिखने के लिए, आप उपरोक्त ड्राइवर (डिस्क क्लास के रूप में) के साथ इंटरफ़ेस कर सकते हैं लेकिन वास्तव में अपने डिवाइस पर कमांड भेजने के लिए इसके नीचे एक ड्राइवर (उदाहरण के लिए एससीआई पोर्ट) का उपयोग करें।

इस तरह असली डिवाइस काम करते हैं। नकली उपकरणों को शीर्ष स्तर की इंटरफ़ेस आवश्यकताओं के अनुरूप होना आवश्यक है, उदा। एक डिस्क, या एक नियंत्रक, या एक माउस, या जो भी हो। हालांकि, नीचे वे कुछ भी पसंद कर सकते हैं - वे जो भी मूल्य पसंद करते हैं उन्हें वापस कर दें।

यह उपयोगकर्ता-मोड एप्लिकेशन के माध्यम से ड्राइवर को नियंत्रित करने और डिवाइस "होने" का नाटक करने की संभावना को खोलता है। ड्राइवर संदेश भेजने के लिए, आप DeviceIoControl पर कर सकते हैं; तो वास्तव में उन संदेशों को प्राप्त करने के लिए आप या तो

  • उन्हें आईपीपी में भरें जो डिवाइस IoControl को बनाता है।
  • क्या ड्राइवर ने उन्हें आपकी प्रक्रिया 'स्मृति स्थान से बाहर पढ़ा है।

ड्राइवर्स \\Registry\\Machine और कई अन्य गैर-उपयोगकर्ता-विशिष्ट गैर-एक्सप्लोरर रजिस्ट्री क्षेत्रों तक भी पहुंच सकते हैं, इसलिए इस तरह से संवाद करना संभव है।

अंत में, ऐसा कोई कह नहीं है कि आप मौजूदा आईओ को फ़िल्टर नहीं कर सकते, बल्कि इसे एक नए डिवाइस के माध्यम से बनाने के बजाय। ऐसा करने के बारे में आप बहुत सारे विकल्प और तरीके जा सकते हैं।

आप ऐसा करने जा रहे हैं, आप की आवश्यकता होगी:

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

    • डब्ल्यूडीएम = विंडोज ड्राइवर मॉडल, मूल रूप से NT ड्राइवर मॉडल के साथ (कुछ) विंडोज 9x मिलाया ।
    • केएमडीएफ = कर्नेल मोड ड्राइवर ढांचा - उपर्युक्त प्रकार के ड्राइवर इसका उपयोग करते हैं, साथ ही अतिरिक्त डब्लूडीएफ (विंडोज चालक फाउंडेशन) जो इसे उपयोग करने में तेज़ी से बनाने के लिए डब्लूडीएम के शीर्ष पर पुस्तकालयों का एक सेट है।
    • यूएमडीएफ = उपयोगकर्ता मोड ड्राइवर ढांचा - कर्नेल मोड के खतरे के बिना ड्राइवर लिखें। यदि आप कर सकते हैं, तो इसका उपयोग करें, कर्नेल मोड ड्राइवर जो ग़लत हो जाते हैं, ब्लूस्क्रीन (ड्राइवर पार्लान्स, बगचेक में) आपके सिस्टम में होंगे।

संपादित: मैं DirectInput पर नहीं बड़े पैमाने पर जानकार हूँ - DLL पुनर्निर्देशन और तरह के माध्यम से उपयोग में विभिन्न एपीआई नियंत्रण ओवरराइड करने के लिए एक रास्ता है, जो जिस तरह से मैं से अधिक आसान हो सकता है हो सकता है वर्णित है।

+0

चालक देव के परिचय के लिए धन्यवाद! मेरा वास्तविक इरादा 360 नियंत्रक के डायरेक्ट इनपुट समर्थन को ठीक करना है। वर्तमान में, आप इसे DI के साथ उपयोग कर सकते हैं लेकिन सीमाओं के साथ; ट्रिगर्स को अलग से संबोधित नहीं कर सकते हैं, ट्रिगर को बटन के रूप में उपयोग नहीं कर सकते हैं (इसलिए यह चार कंधे बटन की अपेक्षा के साथ काम नहीं करेगा), और कोई कंपन [...] – Dataflashsabot

+0

[...] आयन। आपका संपादन मेरा मूल इरादा था; लेकिन डी परंपरागत रूप से जुड़े कार्यों का उपयोग नहीं करता है, बल्कि केवल DirectInputCreate को जोड़ता है जो फ़ंक्शन पॉइंटर्स के साथ संरचना देता है, और यह सी और सी ++ के लिए अलग-अलग इंटरफेस प्रदान करता है। इससे मुझे उस मार्ग से दूर कर दिया गया, लेकिन एक नकली चालक भी कठिन लग रहा है, इसलिए मुझे लगता है कि मैं इसे एक और कोशिश दूंगा। (इससे पहले कि कोई भी एक्सबीसीडी सुझाता है, यह मूल xinput समर्थन तोड़ता है।) – Dataflashsabot

4

सबसे आसान समाधान XInput डिवाइस (Xbox 360 और One) का अनुकरण करने के लिए हो सकता है। ये अधिकांश आधुनिक खेलों में समर्थित हैं और सेट अप बहुत आसान है। यहां एक सी ++ प्रोजेक्ट है जो बिना किसी स्थापित ड्राइवर या बाहरी निर्भरताओं के प्रदान करता है: https://github.com/shauleiz/vXboxInterface/

+0

यह सच नहीं है। वर्चुअल गेमपैड इंटरैक्शन के लिए इस एपीआई का उपयोग करने के लिए आपको अपने सिस्टम पर ScpVBus इंस्टॉल करना होगा। बस इसे [रिलीज नोट] देखें (https://github.com/shauleiz/vXboxInterface/releases/tag/v1.0.0)। – grill2010

0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन इस विषय में रुचि रखने वाले किसी भी व्यक्ति के लिए यह ViGEm नामक इस परियोजना को देखने लायक है।

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

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