【问题标题】:How to get the global mouse cursor type?如何获取全局鼠标光标类型?
【发布时间】:2025-12-10 20:40:02
【问题描述】:

如何将光标类型(手、箭头等)设为枚举 (int) 或位图?

它应该在全球范围内工作,而不仅仅是在应用程序的表单中。我相信,如果鼠标超出应用程序范围,Cursor.Current 将不起作用。我看过互操作 Win32 GetCursorInfo() 和 GetCursor(),但不明白如何使用它们来获取光标类型。

提前致谢。

【问题讨论】:

  • 澄清:您希望能够确定用户的光标是什么。不管它在哪里?当其他程序使用自定义光标时,您可能会遇到问题。
  • 啊,这就是为什么 Cursor.Current 或 GetCursorInfo() 可能没有可用的光标类型信息的原因。好点子!至少,您可以获取当前位图并将它们与已知的光标位图进行比较?如何?是的,无论用户的光标在哪里,它都应该工作。

标签: c# mouse cursor


【解决方案1】:

如果您可以获得光标位图,您可以轻松地将其与已知系统光标的标准位图进行比较。只需检查它们是否具有相同的尺寸 - 如果它们是相同的,则循环遍历像素并在任何不相等时退出。如果您能够遍历整个位图,并且所有像素都匹配,那么您就知道您有两个相同的光标。游标通常类似于 24x24,因此这不应该是一个巨大的性能问题 - 可能有一种比较位图相等性的更快方法,但这是您可能会问的另一个问题。

这种方法可能存在一些问题:

  • 光标可能是自定义光标(想想 Photoshop 的工具)
  • 光标可能是动画的
  • 光标在屏幕上移动时可能会快速变化

作为附录,您希望通过此过程完成什么?您很可能没有考虑过一种完全正交的方法。

【讨论】: