怎么获取当前光标的类型?是插入符,还是箭头

如何获取当前光标的类型?是插入符,还是箭头?
CURSORINFO ci;
ci.cbSize=sizeof CURSORINFO;
::GetCursorInfo(&ci);    //这个结构体没有光标类型信息
                 //DrawIconEx 也不行罢
HCursorhandle=CopyImage(ci.hCursor,IMAGE_CURSOR,30,30,LR_COPYRETURNORG);
                         //复制位图也没用
    
ICONINFO iconif;
::GetIconInfo(ci.hCursor,&iconif);  //获得位图也没用。我要的是类型,不是自定义的光标

有什么办法吗?

------解决方案--------------------
还以为你解决了呢。

typedef struct {
    DWORD cbSize;
    DWORD flags;
    HCURSOR hCursor;
    POINT ptScreenPos;
} CURSORINFO, *PCURSORINFO, *LPCURSORINFO;
这个结构体中的hCursor保存就是光标句柄HCURSOR。

既然是远程主机的光标改变,那就是服务器端程序,服务器端程序通过GetCursorInfo得到光标的相关信息,然后通过网络通信告诉控制端,即客户端。你客户端得到信息,自己绘制即可。

自己定义一个enum类型,标识所有的光标类型
typedef enum
{
  CURSOR_ARROW, 
  CURSOR_WAIT,
  CURSOR_XXXX,
  ....
};
比如得到远程主机的光标的忙的状态,即对应CURSOR_WAIT,那么你的客户端自己绘制一个Wait光标即可。
------解决方案--------------------
引用:
typedef struct _ICONINFO {
  BOOL    fIcon;
  DWORD   xHotspot;
  DWORD   yHotspot;
  HBITMAP hbmMask;
  HBITMAP hbmColor;
} ICONINFO, *PICONINFO;

Members

fIcon

    Type: BOOL

    Specifies whether this structure defines an icon or a cursor. A value of TRUE specifies an icon; FALSE specifies a cursor.

如果是系统光标,这个成员总是false。
那其他成员的值就没意义了

hCursor不看吗 ?与LoadCursor(NULL, IDC_ARROW/...)得到的HCURSOR比对一下看看