C # में माउस की स्थिति प्राप्त करना


117

मैं माउस स्थिति कैसे प्राप्त करूं? मैं इसे स्क्रीन पोजीशन की अवधि में चाहता हूं।

मैं अपना कार्यक्रम शुरू करता हूं जिसे मैं वर्तमान माउस स्थिति पर सेट करना चाहता हूं।

Location.X = ??
Location.Y = ??

संपादित करें: फॉर्म बनने से पहले यह होना चाहिए।

जवाबों:


180

आपको System.Windows.Forms.Cursor.Position का उपयोग करना चाहिए : "एक बिंदु जो स्क्रीन निर्देशांक में कर्सर की स्थिति का प्रतिनिधित्व करता है।"


2
Cursor.Position मेरी टूलटिप को ऑफ़स्क्रीन प्रदर्शित करता है: (-
थॉमस आइड

25
@ थोमस आईड: मैं अनुमान लगा रहा हूं, लेकिन क्या ऐसा हो सकता है क्योंकि माउस की स्थिति स्क्रीन निर्देशांक में है और आपकी टूलटिप स्थिति इसकी मूल विंडो के सापेक्ष है? आपको उपयोग करने की आवश्यकता हो सकती है PointToClient
रिचीहिंडल

हां, यही मुझे करना था।
थॉमस आइड

88

यदि आप प्रपत्रों को संदर्भित नहीं करना चाहते हैं, तो आप कर्सर की स्थिति प्राप्त करने के लिए इंटरोप का उपयोग कर सकते हैं:

using System.Runtime.InteropServices;
using System.Windows; // Or use whatever point class you like for the implicit cast operator
using System.Drawing;

/// <summary>
/// Struct representing a point.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
    public int X;
    public int Y;

    public static implicit operator Point(POINT point)
    {
        return new Point(point.X, point.Y);
    }
}

/// <summary>
/// Retrieves the cursor's position, in screen coordinates.
/// </summary>
/// <see>See MSDN documentation for further information.</see>
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);

public static POINT GetCursorPosition()
{
    POINT lpPoint;
    GetCursorPos(out lpPoint);
    // NOTE: If you need error handling
    // bool success = GetCursorPos(out lpPoint);
    // if (!success)
        
    return lpPoint;
}

1
POINT प्रकार को कैसे देखें?
मनीष दुबे

2
System.Drawing का संदर्भ जोड़ें
Bose_geek

1
भयानक समाधान। लेकिन आपको स्ट्रक्चर पोइंट घोषित करने की जरूरत नहीं है। बस Win32Interop.Structs नाम स्थान का उपयोग करें।
मनप्रीत सिंह ढिल्लों

@ManpreetSinghDhillon .net Core में Win32Interop.Structs उपलब्ध है? यदि हाँ, तो किस नगेट पैकेज / सिस्टम संदर्भ के तहत?
राक्षसीदोन

@ManpreetSinghDhillon अपनी स्वयं की संरचना का उपयोग करके आपको यह पता लगाने की अनुमति देता है कि आप अपने कोड में जो भी बिंदु उपयोग करते हैं, वह थोड़ा चिकना है। यदि Win32Interop.Structs आपके लिए पर्याप्त है, तो सुनिश्चित करें कि आगे बढ़ें और इसके बजाय इसका उपयोग करें!
Mo0gles

17

Cursor.Position को माउस की वर्तमान स्क्रीन कविता मिलेगी (यदि आप एक नियंत्रण में हैं , तो माउसपोज़िशन गुण को भी समान मूल्य मिलेगा)।

माउस स्थिति सेट करने के लिए, आपको इसका उपयोग करना होगा Cursor.Positionऔर इसे एक नया पॉइंट देना होगा :

Cursor.Position = new Point(x, y);

आप Mainअपना फॉर्म बनाने से पहले इसे अपने तरीके से कर सकते हैं।


16

अपने विशिष्ट उदाहरण का उत्तर देने के लिए:

// your example
Location.X = Cursor.Position.X;
Location.Y = Cursor.Position.Y;

// sample code
Console.WriteLine("x: " + Cursor.Position.X + " y: " + Cursor.Position.Y);

इसे जोड़ना using System.Windows.Forms;और जोड़ना न भूलें , (संदर्भ पर राइट क्लिक करें> संदर्भ जोड़ें> .NET टैब> Systems.Windows.Forms> OK)


12
System.Windows.Forms.Control.MousePosition

स्क्रीन निर्देशांक में माउस कर्सर की स्थिति हो जाती है। "स्थिति संपत्ति Control.MousePosition संपत्ति के समान है।"


4
अशिष्ट होने की आवश्यकता नहीं है। यह प्राथमिक उत्तर का एक विकल्प है। मैं इसे केवल इसलिए पसंद करता हूं क्योंकि अन्य 'Cursor.Position' एक पाठ प्रकार के कर्सर IMHO की तरह लगता है और 'MousePosition' अधिक स्पष्ट है।
जेम्स

3
@ जान ड्वोरक यकीन है, और हाँ मुझे लगा कि शायद यह मददगार है। मैंने कुछ इस तरह से कहा होगा "कृपया आप इसमें थोड़ी और जानकारी शामिल कर सकते हैं ताकि मैं देख सकूँ कि यह पहले दिए गए उत्तरों से कैसे भिन्न हो सकता है?"
जेम्स

@JDDvorak अगर आपको लगता है कि वन-लाइनर्स मदद नहीं करते हैं (btw, वे करते हैं) तो इसकी निर्भरता नहीं है अगर प्रश्न 1 दिन पुराना है या 3 साल पुराना है। वैकल्पिक दृष्टिकोण के लिए +1।
नवफाल

7

स्थिति प्राप्त करने के लिए OnMouseMove ईवेंट देखें। MouseEventArgs आपको x एक y स्थिति देगा ...

protected override void OnMouseMove(MouseEventArgs mouseEv) 

माउस स्थिति सेट करने के लिए Cursor.Position गुण का उपयोग करें।

http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.position.aspx


6
   internal static class CursorPosition {
  [StructLayout(LayoutKind.Sequential)]
  public struct PointInter {
     public int X;
     public int Y;
     public static explicit operator Point(PointInter point) => new Point(point.X, point.Y);       
  }

  [DllImport("user32.dll")]
  public static extern bool GetCursorPos(out PointInter lpPoint);

  // For your convenience
  public static Point GetCursorPosition() {
     PointInter lpPoint;
     GetCursorPos(out lpPoint);
     return (Point) lpPoint;
  }

}


3

वर्तमान कर्सर को आरम्भ करें। X और Y की स्थिति प्राप्त करने के लिए इसका उपयोग करें

this.Cursor = new Cursor(Cursor.Current.Handle);
int posX = Cursor.Position.X;
int posY = Cursor.Position.Y;

3

यदि आपको फॉर्म के क्षेत्र में वर्तमान स्थिति प्राप्त करने की आवश्यकता है (प्रयोगात्मक रूप से प्राप्त करें), कोशिश करें:

Console.WriteLine("Current mouse position in form's area is " + 
    (Control.MousePosition.X - this.Location.X - 8).ToString() +
    "x" + 
    (Control.MousePosition.Y - this.Location.Y - 30).ToString()
);

यद्यपि, 8 और 30 पूर्णांक प्रयोग करके पाए गए।

भयानक होगा अगर कोई समझा सकता है कि ये संख्याएं क्यों हैं ^।


इसके अलावा, एक और संस्करण है (विचार कोड फॉर्म कोडहैंड में है):

Point cp = this.PointToClient(Cursor.Position); // Getting a cursor's position according form's area
Console.WriteLine("Cursor position: X = " + cp.X + ", Y = " + cp.Y);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.