2011-12-31 9 views
6

मैं अपने कंप्यूटर पर सी # और किनेक्ट एसडीके का उपयोग कर अपने कंप्यूटर पर माउस चलाने के लिए काम कर रहा हूं। मैं वास्तव में लाल चेतावनी, या किसी प्रकार के आरटीएस, या यहां तक ​​कि केवल सामान्य नेविगेशन के लिए एक खेल खेलने के लिए इसका उपयोग करना चाहता हूं।एक अलग प्रोग्राम में माउस इम्यूलेशन

मुझे मिली समस्या यह है कि एक अलग माउस के साथ प्रोग्राम का उपयोग करते समय, लाल अलर्ट की तरह या वर्चुअल मशीन में जाकर जहां माउस एकीकरण समर्थित नहीं है, प्रोग्राम कॉल पर नहीं उठाएगा सी # प्रोग्राम सिस्टम को बना रहा है। Windows.Forms. कर्सर कॉल, माउस_वेन्ट कॉल अकेले छोड़ दें। मैं खिड़कियों के साथ इंटरफेसिंग करने के लिए नया हूं और यहां क्या हो रहा है, क्या कोई समाधान हल कर सकता है?

--UPDATE-- अद्यतन के रूप में, मुझे अभी भी पूरी तरह से यकीन नहीं है कि क्या हो रहा है, लेकिन मुझे विशेष रूप से लाल अलर्ट के लिए एक समाधान मिल गया है;

चूंकि लाल चेतावनी काफी कम ग्राफिक्स प्रोग्राम है, इसलिए यह एक वर्चुअल मशीन के भीतर विशेष रूप से मेरे लिए चलाने के लिए छोटा है, एक एक्सपी क्लाइंट के साथ vmware वर्कस्टेशन। यदि आप mouse_event कोड का उपयोग करते हैं तो यह अच्छी तरह से काम करता है, फिर भी, जिस चीज के साथ मैंने संघर्ष किया था वह माउस आंदोलन का प्रतिनिधित्व करने के लिए सही कोड ढूंढ रहा था। ऐसा लगता है कि MOVE ध्वज माउस को अपेक्षाकृत ले जाता है, जिसे मैं नहीं चाहता था, और पूर्ण टैग माउस को बिल्कुल नहीं ले गया था। यह है, वास्तव में, उनमें से या कि पूर्ण आंदोलन स्क्रीन पर पैदा करता है, इसलिए माउस आंदोलन के लिए मेरे कोड और क्लिक करने अनुकरण इस तरह देख समाप्त हो गया:

mouse_event((int)0x00000002, cursor.X, cursor.Y, 0, 0); 
क्लिक करने के लिए

और

mouse_event((int)(0x00000001 | 0x00008000), x, y, 0 0); 

माउस आंदोलन के लिए, जहां x और y 65535 (पूर्ण सीमा) से नए निर्देशांक हैं। क्या यह सही है? नाह। लेकिन यह अभी के लिए काम करता है। मुझे लगता है कि विंडोज़ कुछ कार्यक्रमों को अनदेखा करता है जब आरए चलाता है, शायद संगतता मोड के कारण? मेरे पास अभी परीक्षण करने के लिए एक और गेम नहीं है, लेकिन मैं भविष्य में गैर-संगतता मोड के साथ परिणाम पोस्ट करूंगा।

  • पीट

(यह मुझे एक और दो घंटे के लिए एक जवाब के रूप में पोस्ट करते हैं नहीं और मैं सुबह में एक उड़ान पकड़ने के लिए सोने के लिए है!)

+0

मैं बहिष्कृत 'mouse_event' फ़ंक्शन पर 'SendInput' फ़ंक्शन का उपयोग करने की अनुशंसा करता हूं। –

उत्तर

1

आप करना होगा इसे ठीक से काम करने के लिए कुछ निम्न स्तर के विंडोज संदेश करें। रेड अलर्ट जैसे डायरेक्टएक्स का उपयोग करने वाले गेम सिस्टम को नहीं देख पाएंगे। Windows.Forms.Cursor बिल्कुल। विंडोज़ को उचित संदेश भेजने के लिए आपको Windows User32.dll के साथ इंटरफ़ेस करने की आवश्यकता होगी ताकि यह उन्हें अन्य अनुप्रयोगों के लिए उचित रूप से रूट कर सके।

यहाँ आप सी # में User32 DLL के माध्यम से संदेश भेजने के लिए तलाश शुरू कर दी पाने के लिए कुछ कोड है:

[DllImport("USER32.DLL")] 
    public static extern IntPtr FindWindow(string lpClassName, 
     string lpWindowName); 

    // Activate an application window. 
    [DllImport("USER32.DLL")] 
    public static extern bool SetForegroundWindow(IntPtr hWnd); 

    [DllImport("user32.dll")] 
    private static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 

मैं इस हो जाता है कि आप आरंभ उम्मीद है, लेकिन मैं समय प्रत्येक के माध्यम से जाने की जरूरत नहीं है माउस संदेश, wParam और lParam क्या हैं, और प्रत्येक के लिए संदेश क्या होना चाहिए। मुझे यकीन है कि यदि आप चारों ओर खोज करते हैं तो प्रत्येक ईवेंट के लिए भेजने के लिए विशिष्ट संदेश मिल सकते हैं जैसे कि माउस मूव, बायाँ क्लिक करें और राइट क्लिक करें।

शुभकामनाएं।

+1

असल में, डायरेक्टएक्स का उपयोग करने वाला गेम GetMessage() का उपयोग नहीं करेगा, इसलिए SendMessage() का कोई प्रभाव नहीं होगा। आपको निम्न स्तर की सामग्री भी चाहिए। सबसे कम-स्तर की सामग्री जो मुझे पता है mouse_event() है। –

+0

अभी मेरे पास कुछ हैकी है जो आधे काम करता है। मैं माउस पर क्लिक करने के लिए mouse_event() का उपयोग कर रहा हूं और मैं भी थूस माउस को स्थानांतरित करने के लिए SetCursorPos() का उपयोग करने का प्रयास कर रहा हूं। शायद मुझे एक रेड्रा या कुछ याद आ रहा है? लेकिन जब माउस_वेन्ट कहा जाता है तो यह ठीक से काम करता है और माउस को फिर से चलाता है जहां इसे (और क्लिक) करना चाहिए, लेकिन SetCursorPos() नहीं करता है। वर्तमान कोड: '[DllImport (" user32.dll ", EntryPoint =" SetCursorPos ")] [वापसी: MarshalAs (UnmanagedType.Bool)] निजी स्थिर निर्वासन bool SetCursorPos (int x, int y);' –

+0

मुझे यह भी जिक्र करना चाहिए कि mouse_events() सामान्य मशीन में बिल्कुल काम नहीं कर रहा है, माउस_वेन्ट से मुझे कोई प्रतिक्रिया प्राप्त करने का एकमात्र तरीका यह है कि इसे वर्चुअल मशीन पर चलाने का प्रयास करें (मैंने सोचा कि शायद मुझे मिल गया आभासी विचार एक स्रोत था जो काम कर सकता है के माध्यम से चल रहे सभी इनपुट)। –

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