C#获取鼠标光标屏幕坐标完整示例

凌晨两点半
凌晨两点半
发布时间:2026-10-14| 4人浏览过
原创

在C#编程中,若需实时获取鼠标在当前显示器上的绝对位置(屏幕坐标),最直接且高效的方式是通过Platform Invocation Services (P/Invoke) 调用 Windows 用户界面动态链接库(user32.dll)。该方法不依赖特定的UI框架,因此在 WinForm、WPF 甚至控制台应用中均通用。

核心实现原理

Windows 提供了一个名为 GetCursorPos 的原生 API 函数,用于检索光标的屏幕坐标。要在 C# 中使用它,我们需要执行两个关键步骤:

  1. 声明外部函数:DllImport 指向 user32.dll。
  2. 定义数据结构:匹配 Windows 结构体的 POINT 类,包含 X 和 Y 两个整型属性。

具体操作步骤

第1步:添加必要的命名空间引用

首先确保文件中引入了以下命名空间,以支持平台调用和内存布局控制:

using System;
using System.Runtime.InteropServices;

第2步:定义 POINT 结构体

由于 GetCursorPos 需要输出一个结构体对象,我们需要手动定义与 C 语言一致的布局。使用 StructLayout(LayoutKind.Sequential) 确保字段在内存中的排列顺序与 Windows API 期望的一致。

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
    public int X;
    public int Y;

    // 提供构造函数以便初始化
    public POINT(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }
}

第3步:声明 P/Invoke 方法

在同一个类或专门的 Utility 类中,声明导入函数。注意参数使用 out 关键字,表示该参数将接收返回值。

// 必须放在 class 内部或 static 类中
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);

第4步:调用并获取结果

在业务逻辑(如按钮点击事件、Timer定时器或鼠标移动事件中)调用上述方法即可获取当前坐标。

// 示例用法
private void GetCurrentCursorPosition()
{
    POINT pos = new POINT();
    
    // 调用 API
    if (GetCursorPos(out pos))
    {
        Console.WriteLine($"当前鼠标屏幕坐标:X={pos.X}, Y={pos.Y}");
        // 这里可以将 pos.X 和 pos.Y 赋值给 UI 控件显示
    }
    else
    {
        Console.WriteLine("无法获取光标位置");
    }
}

注意事项

  • 线程安全:GetCursorPos 是线程安全的,可以在后台线程中调用,但修改 UI 元素时需遵循 UI 线程规则(如在 WPF 中使用 Dispatcher)。
  • 多显示器支持:如果用户使用多显示器且跨越虚拟桌面,返回的坐标是相对于虚拟屏幕左上角的。X/Y 可能为负值(例如第二个显示器在主显示器左侧时)。
  • 性能影响:如果在高频循环(如每帧检测)中调用,请注意 CPU 开销。对于高性能需求场景,建议考虑使用钩子(Hook)机制替代轮询。

以上就是C#利用Win32 API获取鼠标屏幕坐标的详细内容,更多关于C#基础API调用的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。