Я нашел один обходной путь - передайте параметру istepIfAniCur параметра DrawIconEx максимальное значение UINT . Невозможно, чтобы кто-то создал анимированный курсор с 4 294 967 295 кадрами (возможно, возможно для какого-то фильма с курсором:)
С этим фактом вы можете передать это значение в функцию DrawIconEx , которая будет возвращать False в случае, когда курсор анимирован (из-за превышения диапазона кадра), и True в случае статического, потому что оно игнорирует параметр istepIfAniCur. Вы должны передать 0 параметру diFlags, потому что не нужно ничего рисовать.
Вот пример Delphi:
if not DrawIconEx(Canvas.Handle, 0, 0, hCursor, 0, 0, High(Cardinal), 0, 0) then
Caption := 'Cursor is animated ...'
else
Caption := 'Cursor is not animated ...';
И поскольку я обещал тег C ++, вот моя попытка перевода
if (!DrawIconEx(this->Canvas->Handle, 0, 0, hCursor, 0, 0, UINT_MAX, NULL, 0))
this->Caption = "Cursor is animated ...";
else
this->Caption = "Cursor is not animated ...";
Превышение диапазона фреймов также обозначается ошибкой ОС ERROR_INVALID_PARAMETER , что вы можете проверить с помощью функции GetLastError , когда DrawIconEx не удается.