| Предыдущий | Следующий |
| ERROR_INVALID_CURSOR_HANDLE | ERROR_INVALID_HOOK_HANDLE |
ERROR_INVALID_ACCEL_HANDLE
HACCEL не указывает на таблицу акселераторов
Таблицы акселераторов сопоставляют нажатия клавиш с идентификаторами команд и используются в цикле сообщений через TranslateAccelerator. Дескриптор является непрозрачным и должен быть получен из API создания или загрузки таблицы акселераторов.
Распространённая ошибка — цикл сообщений переживает модуль или владельца ресурса, из которого была загружена таблица. Другая причина — хранение нескольких дескрипторов GUI-ресурсов в нетипизированном целочисленном поле с последующим использованием неверного. Идентификаторы команд внутри таблицы сами по себе не являются дескрипторами акселераторов.
Что проверить
- Проверьте возвращаемое значение вызова загрузки или создания таблицы до входа в цикл.
- Отслеживайте выгрузку модуля и явное уничтожение таблицы акселераторов.
- До разрешения источника запишите результат
HACCELотдельно от целевогоHWNDи идентификаторов команд. - Если преобразование просто не создаёт команду, после подтверждения допустимости дескриптора проверьте цикл сообщений и записи таблицы.
Это не ошибка записи акселератора или сопоставления команды; USER32 отклонил сам дескриптор таблицы.
Ссылки
- Microsoft: сведения о клавиатурных акселераторах
- Microsoft: окна и сообщения
- Wine: перечень реализации API user32
Нужно найти другой код? Найти другой код состояния или ошибки.
