Как вернуть системный курсор

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl___, 21 окт 2025.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.229
    Здравствуйте.
    Изменил системный курсор
    Код (ASM):
    1. invoke LoadCursorFromFileA,&FileName
    2. mov hCursor,rax
    3. invoke SetSystemCursor,hCursor,OCR_NORMAL
    Вернуть системный курсор через DestroyCursor, LoadCursor, SetCursor не получается, только хардкор, только перезагрузка. Подскажите как?
     
    Последнее редактирование: 21 окт 2025
  2. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    223
    Попробуйте
    Код (Text):
    1. SystemParametersInfo(SPI_SETCURSORS, 0, NULL, 0);
     
    miilalex и Mikl___ нравится это.
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.229
    Не знаю, правильно или нет, но работает
    Код (ASM):
    1. wmCREATE:invoke   LoadCursorA,0,IDC_ARROW
    2.         invoke    CopyIcon,rax
    3.         mov       hOldCursor,rax
    4.         invoke    LoadCursorFromFileA,&FileName
    5.         mov       hNewCursor,rax
    6.         invoke    SetSystemCursor,rax,OCR_NORMAL
    7.         . . . . .
    8. wmDESTROY:invoke  DestroyCursor,hNewCursor
    9.         invoke    SetSystemCursor,hOldCursor,OCR_NORMAL
     
    Последнее редактирование: 21 окт 2025
    miilalex нравится это.
  4. miilalex

    miilalex Member

    Публикаций:
    0
    Регистрация:
    8 сен 2024
    Сообщения:
    45
    Майкрософт в явном виде предлагает передавать вместо hInst NULL функции LoadCursor (A или W) и обещает, что системный курсор с соответствующим идентификатором будет загружен

    при этом, как обычно, деликатно умалчивают, следует ли уничтожать такой/этот курсор при завершении процесса )

    мне кажется, тут избыточно загружать некий другой курсор и перещелкивать системный сначала на него, а после на тот, что мы получили от системы как дефолтный

    если, конечно, система не реагирует на теребонькание в духе "покажь, что у тебя за курсор "стрелка" и теперь-ка сделай его по умолчанию" - тогда, наверное, отвлечь её заведомо иным курсором имеет смысл

    при этом в ответ на WM_DESTROY мне не кажется правильным уничтожать этот левый курсор до того, как он был выведен из поля зрения системы заменой его на оригинальный

    есть надежда, что система где-то ведет счетчик ссылок на каждый такой объект и не лезет реально освобождать память, им занятую (а равно и не лезет в преждевременно освобожденный курсор, если его понадобилось отрисовать на экране) - но я не был бы оптимистом, хаха.