সি # তে মাউস পজিশন পাওয়া


117

আমি কীভাবে মাউস পজিশন পাব? আমি পর্দার অবস্থানের মেয়াদে এটি চাই।

আমি আমার প্রোগ্রামটি শুরু করি আমি বর্তমান মাউস অবস্থানটিতে সেট করতে চাই।

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

সম্পাদনা: ফর্মটি তৈরি হওয়ার আগে এটি অবশ্যই ঘটবে।

উত্তর:


180

আপনার System.Windows. Forms.Cursor.Position ব্যবহার করা উচিত : "একটি পয়েন্ট যা স্ক্রিনের স্থানাঙ্কগুলিতে কার্সারের অবস্থান উপস্থাপন করে।"


2
কার্সার.পজিশনটি আমার টুলটিপটি অফস্ক্রিনটি দেখায়: (-
টমাস আইয়েড

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
সিস্টেমের রেফারেন্স যুক্ত করুন
ra অঙ্কন

1
দুর্দান্ত সমাধান তবে আপনাকে স্ট্রাক্ট পয়েন্ট ঘোষণা করতে হবে না। কেবল Win32Interop.Sructs নাম স্থান ব্যবহার করুন ace
মনপ্রীত সিং illিলন

@ মনপ্রীতসিংহডিহিলন কি উইন 32 ইনটারপ.শিক্ষা। নেট কোর-এ উপলব্ধ? যদি হ্যাঁ, তবে কোন ন্যুগেট প্যাকেজ / সিস্টেম রেফারেন্সের অধীনে?
দৈত্যচিকিত্সক

@ মনপ্রীতসিংহহিলন আপনার নিজস্ব স্ট্রাক্ট ব্যবহারের সাহায্যে আপনি আপনার কোডটিতে যে পয়েন্ট ব্যবহার করেন তা এতে অন্তর্ভুক্ত করতে পারবেন, এটি কিছুটা মসৃণ। যদি Win32Interop.S્રুক্টগুলি আপনার পক্ষে যথেষ্ট হয় তবে অবশ্যই এগিয়ে যান এবং পরিবর্তে এটি ব্যবহার করুন!
Mo0gles

17

Cursor.Position (যদি আপনি একটি আছে মাউসের বর্তমান স্ক্রীনে poisition পাবেন কন্ট্রোল , MousePosition সম্পত্তি একই মান পেতে হবে)।

মাউস অবস্থান নির্ধারণ করতে, আপনাকে 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;এটি যুক্ত করতে এবং এতে রেফারেন্স যুক্ত করতে ভুলবেন না (রেফারেন্সগুলিতে ডান ক্লিক করুন> রেফারেন্স যুক্ত করুন> নেট ট্যাব> সিস্টেমস। উইন্ডোস For ফর্মস> ওকে)


12
System.Windows.Forms.Control.MousePosition

স্ক্রিন স্থানাঙ্কগুলিতে মাউস কার্সারের অবস্থান পান। "অবস্থানের সম্পত্তিটি নিয়ন্ত্রণের মতো।


4
অভদ্র হওয়ার দরকার নেই। এটি প্রাথমিক উত্তরের একটি বিকল্প। আমি কেবল এটিকেই পছন্দ করি কারণ অন্য 'কার্সার.পজিশন' শোনার জন্য কোনও পাঠ্য টাইপের কার্সার আইএমএইচও এবং 'মাউস পজিশন' আরও স্পষ্ট।
জেমস

3
@ জন ডিভোরাক নিশ্চিত, এবং হ্যাঁ আমি এটি সম্ভবত সহায়ক বলে মনে করেছি। আমি এই জাতীয় কিছু বলতাম "দয়া করে আপনি কি আরও কিছু তথ্য অন্তর্ভুক্ত করতে পারেন যাতে আমি দেখতে পারি যে এটি পূর্বের উত্তরগুলির থেকে কীভাবে আলাদা হতে পারে?"
জেমস

@ জনডভোরাক আপনি যদি ভাবেন যে ওয়ান-লাইনাররা সাহায্য করে না (বিটিডব্লিউ, তারা করে) তবে প্রশ্নটি 1 দিনের বা 3 বছরের পুরানো কিনা তা নির্ভর করে না। বিকল্প পদ্ধতির জন্য +1।
নওফাল

7

পজিশনটি পেতে অনমাউস ইভেন্টটি দেখুন at মাউসএভেন্টআর্গস আপনাকে x এক্স ওয়াই অবস্থান দেবে ...

protected override void OnMouseMove(MouseEventArgs mouseEv) 

মাউস অবস্থান নির্ধারণ করতে কার্সার.পজিশন বৈশিষ্ট্যটি ব্যবহার করুন।

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

বর্তমান কার্সারটি আরম্ভ করুন। এক্স এবং ওয়াইয়ের অবস্থান পেতে এটি ব্যবহার করুন

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);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.