C # का उपयोग करके माउस कर्सर कैसे ले जाएं?


81

मैं हर एक्स सेकंड में माउस की गति का अनुकरण करना चाहता हूं। उसके लिए, मैं एक टाइमर (x सेकंड) का उपयोग करूंगा और जब टाइमर टिक जाएगा तो मैं माउस आंदोलन करूंगा।

लेकिन, मैं C # का उपयोग करके माउस कर्सर को कैसे स्थानांतरित कर सकता हूं?


3
यह एक समस्या के आधे समाधान की तरह लगता है, जिसके बारे में आप हमें नहीं बता रहे हैं, जिसमें संभवतः अधिक सुरुचिपूर्ण समाधान हैं।
डेमियन_इन_उन्नीवर

यह काफी संभव है! हमें समझ में नहीं आता कि क्यों लेकिन स्क्रीन सेवर 10 मिनट में सक्रिय हो जाता है। लेकिन हम 999 मिनट डालते हैं: पी
एफ।

3
तब आपको उन समाधानों की तलाश होनी चाहिए जो स्क्रीन सेवर को तब सक्रिय होने से रोकते हैं जब आपका एप्लिकेशन चल रहा होता है, बजाय माउस या स्क्रीनसेवर सेटिंग्स के। उदाहरण के पी / आह्वान SetThreadExecutionState । मुझे संदेह था कि यह स्क्रीनसेवर से संबंधित था - प्रोग्राम्ड माउस मूवमेंट स्क्रीनसेवर टाइमर को रीसेट नहीं करता है।
डेमियन___बेलिवर ०11

जवाबों:


87

Cursor.Positionसंपत्ति पर एक नज़र डालें । यह आपको आरंभ करना चाहिए।

private void MoveCursor()
{
   // Set the Current cursor, move the cursor's Position,
   // and set its clipping rectangle to the form. 

   this.Cursor = new Cursor(Cursor.Current.Handle);
   Cursor.Position = new Point(Cursor.Position.X - 50, Cursor.Position.Y - 50);
   Cursor.Clip = new Rectangle(this.Location, this.Size);
}

1
धन्यवाद @JamesHill, मुझे याद नहीं है कि यह कैसे करना है और आपका उदाहरण उत्कृष्ट है। मेरा मामला है कि मैंने माउस की गति से संबंधित समय (पिक्सेल प्रति सेकंड) बनाने के लिए x और y में कुछ गणनाएँ जोड़ दी हैं
Pimenta

2
क्या यह WinForms दृष्टिकोण है?
ग्रीनल्डमैन

15
मुझे ऐसा लगता है कि मुझे इस बात का उल्लेख करना चाहिए ताकि कोई मेरे द्वारा की गई प्रफुल्लित करने वाली समस्या में न आए। Cursor.Clipआकार द्वारा निर्दिष्ट करने के लिए अपने माउस के आंदोलन को प्रतिबंधित करेगा Locationऔर Size। तो ऊपर वाला स्निपेट केवल आपके माउस को एप्लिकेशन के बाउंडिंग बॉक्स में ले जाने की अनुमति देगा।
ब्रैंडन

Cursor.Positionवर्चुअल मशीन में उपयोग किए जाने पर एक निश्चित सेटिंग की आवश्यकता हो सकती है ।
पोलित्जर डे

ठीक काम करता है, और अगर Cursor.Clip लाइन को हटा दिया जाता है तो यह विंडो के कम से कम होने पर भी काम करता है।
बेन

33

पहले Win32.cs नामक एक क्लास जोड़ें

public class Win32
{ 
    [DllImport("User32.Dll")]
    public static extern long SetCursorPos(int x, int y);

    [DllImport("User32.Dll")]
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);

    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        public int x;
        public int y;

        public POINT(int X, int Y)
        {
            x = X;
            y = Y;
        }
    }
}

आप इसे इस तरह उपयोग कर सकते हैं:

Win32.POINT p = new Win32.POINT(xPos, yPos);

Win32.ClientToScreen(this.Handle, ref p);
Win32.SetCursorPos(p.x, p.y);

इसके अलावा WinForm में आप Cursor.Position = नए बिंदु (x, y) का उपयोग कर सकते हैं;
user3290286

POINT प्रकार कहाँ से है?
रोलरॉल

इस विधि का उपयोग करके आप माउस कर्सर स्थिति कैसे प्राप्त कर सकते हैं?
बार्लोप

यह अच्छा है .. यह ध्यान दिया जाना चाहिए कि यह फॉर्म के शीर्ष बाईं ओर के सापेक्ष है। तो यह उसी निर्देशांक का उपयोग करता है जैसे कि एक प्रपत्र पर एक नियंत्रण, और उसी निर्देश का उपयोग (और - ऊपर मेरी टिप्पणी में मेरी q का जवाब देने के लिए - जो कि इससे प्राप्त किया जा सकता है), माउसइवेंटआर्ग्स ई, जैसे कि फॉर्म का माउसओवे विधि।
बार्लोप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.