C# - 验证光标 != 是否为默认值

本文关键字:是否 默认值 验证 光标 | 更新日期: 2023-09-27 18:30:40

所以,我有一个问题,我无法解决它。

当我单击按钮时,光标会转到确定的位置,在此之后,它执行一次单击。当它这样做时,我的应用程序被最小化(提议),光标停留在我使用的其他程序中。在这个确定的位置,光标将"默认"更改为"手",我希望在这一刻,我的应用程序显示一个消息框。

问题是:当这个其他程序打开时,我的应用程序没有识别光标已更改,我使用以下代码:

If (Cursor.Current != Cursors.Default)
{ MessageBox.Show("Hello!");
}

它不起作用。

为什么?可以帮我吗?

对不起,我的英语XD不好

C# - 验证光标 != 是否为默认值

Cursor.Current 属性获取当前线程拥有的游标。这意味着:

  • 无法从非 UI 线程获取 UI 的当前光标
  • 您无法获取不同的进程(因此无法获取不同线程)的游标

如果要获取全局游标,则需要使用其他方法。 Cursor.Current内部使用GetCursor。其文件指出:

若要获取有关全局游标的信息(即使它不归当前线程所有),请使用 GetCursorInfo

您可以使用来自 PInvoke.net 的签名进行 P/调用此本机函数。

下面是使用它获取全局游标并将其转换为托管游标实例的示例:

CURSORINFO info;
info.cbSize = Marshal.SizeOf(typeof(CURSORINFO));
Boolean ret = GetCursorInfo(out info);
if (!ret) {
    throw new Exception();
}
Cursor c = new Cursor(info.hCursor);