2010-04-15 9 views
13

क्या कोई मुझे बता सकता है कि सी # में डायरेक्टएक्स गेम को कैसे हुक/ओवरले करना है?एक डायरेक्टएक्स गेम हुक/ओवरले करें?

मैंने एक गेम ओवरलैप करने के लिए एक पूर्णस्क्रीन सी # विंडो प्राप्त करने का प्रयास किया है, हालांकि यह नहीं होगा। थोड़ा शोध करने के बाद, मुझे पता चला कि मुझे गेम को हुक करने की आवश्यकता है और फिर सी # विंडो प्रदर्शित करें।

क्या कोई यह समझा सकता है कि मैं यह कैसे करूं? क्या मैं एक डायरेक्टएक्स गेम पर सी # फॉर्म प्रदर्शित करने में सक्षम हूं?

+0

कोई भी? अगर किसी ने स्टीम या एक्सफायर ओवरले देखा है, तो मुझे यह पसंद है। उपयोगकर्ता खेल खेलते समय नेट सर्फ करने में सक्षम हैं। –

उत्तर

5

(प्रकटीकरण: मैं इस कंपनी के लिए काम करते हैं)

आप हमारे ०१२३५१६२५३ कोशिश कर सकते हैं, इसमें सी # से COM ऑब्जेक्ट्स को हुक करने की कार्यक्षमता है। यह COM ऑब्जेक्ट्स का एक सेट है जिसका उपयोग किसी प्रोग्रामिंग भाषा (COM को समर्थन देने) से किया जा सकता है। कैसे वीडियो पर कब्जा और एक ओवरले जोड़ने के लिए दिखा स्रोत कोड के साथ एक लेख उपलब्ध है: instrumenting Direct3D applications to capture video and calculate FPS

COM Spy Console और Direct Sound Capture दो उदाहरण है कि DirectX तरह COM ऑब्जेक्ट हुक करने के लिए एक सांत्वना लागू करता है।

उम्मीद है कि यह मदद करता है।

+0

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

+1

आप संबंधित मंचों में प्रश्न पूछ सकते हैं। मेरी सिफारिश लेखों को शुरुआती बिंदु के रूप में उपयोग कर रही है। –

+1

यह दूसरों के लिए समस्या का समाधान नहीं करता है। कृपया वर्णन करें कि समाधान क्या है। –

2

चूंकि आपके पास सी # से प्रत्यक्ष डायरेक्टएक्स एक्सेस नहीं है, यह मुश्किल हो सकता है।

अवधारणा के अपने सीमित समझ से: है कि सबसे अच्छा C/C++

के लिए अनुकूल है

DirectX हुक्स एक DirectX संदर्भ के लिए संलग्न है और यह जोड़ तोड़, इस/एक अन्य कार्यक्रम की स्मृति के साथ खिलवाड़ की आवश्यकता नहीं हो सकता से मिलकर बनता है, कुछ

हालांकि मैं गलत हो सकता है, लेकिन यह एक उन्नत विषय है और मेरी पेट मुझसे कहता है आप नेट के तहत मुद्दों हो सकता है

+0

सी ++ के साथ हुकिंग करने के बारे में, और फिर हुक के भीतर से सी # प्रोग्राम चला रहा है? क्या यह सी # प्रोग्राम शो नहीं करेगा, या यह ऐसा काम नहीं करता है? –

+0

नहीं, आप इस तरह के अप्रबंधित सी ++ के भीतर एक सी # प्रोग्राम नहीं दिखा सकते हैं। एक आम सुझाव है कि एक प्रबंधित/अप्रबंधित सी ++ रैपर के लिए सी ++/सीएलआई का उपयोग डायरेक्टएक्स के साथ आधे इंटरफेसिंग के लिए है, लेकिन "प्रबंधित" लाइब्रेरी का आधा भी सी # सी सीधे कॉल कर सकता है। लेकिन यह बदसूरत लग रहा है। स्पैज़रामा (जस्टिन एस ^)) हुकिंग और ओवरलेइंग का उदाहरण पूरी तरह से काम करता है और एक अमूल्य संसाधन था। – Jason

16

आप my example on hooking the Direct3D 9 API using C# को आजमा सकते हैं। यह EasyHook को एक ओपन सोर्स .NET असेंबली का उपयोग करता है जो आपको प्रबंधित कोड से हुक को अप्रबंधित कार्यों में स्थापित करने की अनुमति देता है।

स्लिम डीएक्स का भी उपयोग किया जाता है - यह डायरेक्ट 3 डी पुस्तकालयों के आस-पास एक ओपन सोर्स प्रबंधित रैपर है।

हुकिंग का मुश्किल हिस्सा COM ऑब्जेक्ट्स वर्चुअल फ़ंक्शंस के पते का निर्धारण कर रहा है। यह उपरोक्त उदाहरण में एक छोटा सी ++ सहायक डीएलएल का उपयोग करके किया जाता है जो VTable से पते पाता है। [अपडेट: एक टिप्पणी पोस्ट की गई है कि शो को सी # में वीटीबल से फ़ंक्शन पॉइंटर्स कैसे प्राप्त करें - कॉम ऑब्जेक्ट को इंटपट्रेट दिया गया है]

उदाहरण IDirect3DDevice9 की एंडसेन विधि को हुक करता है, जो आप भी है किसी भी ओवरले आकर्षित करना चाहते हैं। ओवरले में एक फॉर्म प्रदर्शित करने के लिए मुझे इतना यकीन नहीं है कि यह इतना आसान होगा - मेरा मतलब है कि आप छवि को आसानी से पर्याप्त रूप से प्रस्तुत कर सकते हैं, लेकिन आपको इनपुट को कैप्चर करना होगा और फॉर्म में ईवेंट को मैन्युअल रूप से प्रतिक्रिया/पास करना होगा उचित सवाल। सौभाग्य!

+1

यहां एक अद्यतन संस्करण है जिसमें एक बहुत ही सरल ओवरले उदाहरण है - 100% सी #: [डायरेक्ट 3 डी 9 , 10 ओवरले] (http://spazzarama.wordpress.com/2011/03/14/c- स्क्रीन- कैप्चर- और-overlays-for-direct3d-9-10-and-11-using-api-hooks/) –

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