📜  获取鼠标位置统一 - C# (1)

📅  最后修改于: 2023-12-03 15:27:52.010000             🧑  作者: Mango

获取鼠标位置统一 - C#

在开发程序时,经常需要获取鼠标的位置,这对很多功能都是至关重要的,比如鼠标点击、拖动等。本文将介绍如何在 C# 中获取鼠标位置的方法。

方法一:使用 Win32 API

Windows 提供了一组 Win32 API,可以用来获取当前鼠标的位置。这是最常用的方法,代码如下:

using System.Drawing;
using System.Runtime.InteropServices;

public static class MouseUtilities
{
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool GetCursorPos(out Point lpPoint);

    public static Point GetCursorPosition()
    {
        Point lpPoint;
        GetCursorPos(out lpPoint);
        return lpPoint;
    }
}

以上代码定义了一个 MouseUtilities 类,并且使用了 DllImport 特性导入了 user32.dll 库中的 GetCursorPos 函数。GetCursorPos 函数可以获取当前鼠标的位置,返回值为一个布尔值,如果函数执行成功则返回 true,否则返回 false。

使用以下代码获取当前鼠标的位置:

Point position = MouseUtilities.GetCursorPosition();
方法二:使用 Windows.Forms

在 Windows.Forms 中,可以通过 Control.MousePosition 静态属性获取鼠标位置。这种方法比较简单,代码如下:

using System.Drawing;
using System.Windows.Forms;

public static class MouseUtilities
{
    public static Point GetCursorPosition()
    {
        return Control.MousePosition;
    }
}

以上代码定义了一个 MouseUtilities 类,其中的 GetCursorPosition 方法使用了 Control.MousePosition 静态属性来获取当前鼠标的位置。

使用以下代码获取当前鼠标的位置:

Point position = MouseUtilities.GetCursorPosition();
方法三:事件监听

Windows.Forms 还提供了一组鼠标事件,可以通过监听这些事件来实时获取鼠标位置。这是最复杂的方法,下面是代码:

using System.Drawing;
using System.Windows.Forms;

public class MouseListener : Form
{
    public MouseListener()
    {
        MouseMove += OnMouseMove;
    }

    private void OnMouseMove(object sender, MouseEventArgs e)
    {
        Point position = e.Location;
        // 处理鼠标移动事件
    }
}

以上代码定义了一个 MouseListener 类,并且在其构造函数中添加了对 MouseMove 事件的监听。当鼠标移动时,OnMouseMove 方法将被调用,从事件参数中获取当前鼠标的位置。

使用以下代码创建一个 MouseListener 对象:

MouseListener listener = new MouseListener();

可以看出,使用 Win32 API 获取鼠标位置是最常用的方法。而使用 Windows.Forms 或事件监听的方法则比较适用于一些特定的场景。