2012-11-22 24 views
12

मैं सी #, फ्रेमवर्क 4 (32 बिट) में एक विंडोज़ फॉर्म एप्लिकेशन पर काम कर रहा हूं।माउस को स्थिति में ले जाएं और बाएं क्लिक करें

मेरे पास एक सूची है जो माउस के तार रखती है, और मैं उन्हें पकड़ सकता हूं। अब तक सब ठीक है।

लेकिन किसी बिंदु पर, मैं उन तारों पर जाना चाहता हूं और बाईं माउस पर क्लिक करना चाहता हूं।

for (int i = 0; i < coordsX.Count; i++) 
{ 
    Cursor.Position = new Point(coordsX[i], coordsY[i]); 
    Application.DoEvents(); 
    Clicking.SendClick(); 
} 

और क्लिक करके वर्ग:

यह है कि यह कैसे अभी की तरह लग रहा है

class Clicking 
    { 
     private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002; 
     private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004; 
     private static extern void mouse_event(
       UInt32 dwFlags, // motion and click options 
       UInt32 dx, // horizontal position or change 
       UInt32 dy, // vertical position or change 
       UInt32 dwData, // wheel movement 
       IntPtr dwExtraInfo // application-defined information 
     ); 

     // public static void SendClick(Point location) 
     public static void SendClick() 
     { 
      // Cursor.Position = location; 
      mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new System.IntPtr()); 
      mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new System.IntPtr()); 
     } 
    } 

लेकिन मैं इस त्रुटि हो रही है:

Could not load type 'program.Clicking' from assembly 'program, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'mouse_event' has no implementation (no RVA). 

और मैं वास्तव में समझ में नहीं आता कि समस्या क्या है ... क्या आप जानते हैं कि समस्या क्या है? या क्या आप ऐसा करने का एक बेहतर तरीका जानते हैं जो मैं करने की कोशिश कर रहा हूं?

उत्तर

8

आप निम्न पंक्ति शामिल किया याद कर रहे हैं?

[DllImport("user32.dll")] 
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, 
    UIntPtr dwExtraInfo); 

यह user32 DLL, है जो आप अपने प्रोग्राम में उपयोग करने के लिए कोशिश कर रहे हैं से समारोह mouse_event आयात करेगा। वर्तमान में आपका प्रोग्राम डीएलएल के भीतर इस विधि के बारे में नहीं जानता है जब तक कि आप निर्दिष्ट नहीं करते हैं कि यह कहां से आता है।

वेबसाइट PInvoke.net user32 Mouse Event इस तरह की चीज़ों पर मूल बातें के लिए काफी आसान है।

Directing mouse events [DllImport(“user32.dll”)] click, double click का उत्तर आपकी समझ के लिए बहुत मददगार होगा।

flags क्या आज्ञा देता है आपको लगता है कि उदाहरण में mouse_input समारोह में भेजने के लिए, आप देख सकते हैं कि वह एक ही पंक्ति में दोनों mouse down और mouse up भेज रहा है चाहते हैं, तो इस ठीक है क्योंकि mouse_event समारोह उन झंडे को विभाजित और होगा उन्हें लगातार निष्पादित करें।


भी ध्यान रखें कि इस विधि SendInput आदेश, SendInput और SetMousePos का एक अच्छा उदाहरण ने ले लिया है At this Blog

+0

मैंने उस वर्ग को क्लिक क्लास में डाला, लेकिन फिर भी वही त्रुटि – Mathlight

+0

क्या आपने 'mouse_event' की अपनी अस्वीकृति हटा दी? सुनिश्चित करें कि आप ऐसा करते हैं और इसे इसके साथ प्रतिस्थापित करते हैं। – Serdalis

+0

और यह प्रेषण मेरे प्रश्न के लिए विशेष रूप से कैसे काम करेगा? क्योंकि मैं इस पर नया हूं, और मुझे नहीं पता कि मुझे लिंक से सभी कोड चाहिए ... – Mathlight

1

मुझे लगता है कि आप निम्नलिखित लाइन

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
+0

कि trows त्रुटि पाया जा सकता है: गुण 'DllImport' इस घोषणा के प्रकार पर मान्य नहीं है । यह केवल 'विधि' घोषणाओं पर मान्य है। – Mathlight