如何在windows中获取鼠标光标类型(默认、手动、等待、调整大小等)?

如何在windows中获取鼠标光标类型(默认、手动、等待、调整大小等)?,windows,winapi,Windows,Winapi,我想收到一个通知,当鼠标光标从箭头变为时针玻璃等 直到现在,我才设法得到鼠标位置更改事件的通知,但我不知道如何获得光标类型。PCURSORINFO结构似乎不包含有关游标类型的任何信息 这是我到目前为止的代码: static LRESULT CALLBACK WinEventCallback(_In_ int nCode, _In_ WPARAM wParam,

我想收到一个通知,当鼠标光标从箭头变为时针玻璃等

直到现在,我才设法得到鼠标位置更改事件的通知,但我不知道如何获得光标类型。PCURSORINFO结构似乎不包含有关游标类型的任何信息

这是我到目前为止的代码:

static LRESULT CALLBACK WinEventCallback(_In_ int nCode,
                                          _In_ WPARAM wParam,
                                          _In_ LPARAM lParam)
{
    PCURSORINFO curInfo;
    curInfo->cbSize = sizeof(curInfo);
    GetCursorInfo(curInfo);
}    

void MouseCursorHook::setMouseCursorHook()
    {

        HHOOK evntHook = SetWindowsHookEx(WH_MOUSE_LL,
                                                   WinEventCallback,
                                                   GetModuleHandle(0),
                                                   0

                        );      
    }

首先,对
GetCursorInfo()
的调用是错误的。您正在传递一个未初始化的指针。应该是这样的:

CURSORINFO curInfo = {};
curInfo.cbSize = sizeof(curInfo);
GetCursorInfo(&curInfo);

其次,
CURSORINFO
有一个
hCursor
字段。您可以将其与
LoadCursor()
/
LoadImage()
的返回值进行比较,以查看是否正在使用标准光标。不过,您必须单独比较每个标准光标

由于任何应用程序都可以自由使用自定义游标(许多应用程序都可以),您希望为它们提供什么样的游标类型?大多数应用程序不关心当前光标类型是什么;当您想要更改光标时,您存储当前光标,设置所需的光标,然后在完成后将其设置回原始光标,当前光标、新光标和原始光标都是您自己创建的。我不知道有任何全局功能可以检索当前的,因为当前有几十个,每个窗口控件一个。@KenWhite我想获取当前可见的Windows内置光标类型,即使没有加载其他窗口,例如Windows桌面。我已经看到了一些常量,比如IDC_HAND,IDC_ARROW,在这里定义:。标题和问题体询问不同的事情。你真正需要什么?虽然这听起来像是一个,但也请解释一下,您最终要完成的是什么。@I不可检测我想问的是,当鼠标光标类型发生变化时,是否有办法从Windows操作系统获取通知。如果不可能,那么获取光标类型的最佳方法是什么。我还提供了一些与我目前所做工作相关的代码。不过,你还没有回答,你最终想要完成的是什么。这一点很重要,要理解,要知道您是否正在实施适当的解决方案,还是走错了方向。