Таблица клавиш-ускорителей состоит из массива структур ACCEL, каждая из которых определяет отдельный ускоритель. Каждая структура ACCEL включает в себя ниже перечисленную информацию:
Чтобы обработать нажатия клавиш ускорителя для заданного потока, разработчик должен вызвать функцию TranslateAccelerator в цикле обработки сообщений, связанном с очередью сообщений потока. Функция TranslateAccelerator осуществляет текущий контроль за вводом с клавиатуры в очередь сообщений, проверяющий комбинации клавиш, которые соответствуют записи в таблице клавиш-ускорителей. Когда TranslateAccelerator находит такое соответствие, она преобразует ввод с клавиатуры (то есть сообщения WM_KEYUP и WM_KEYDOWN) в сообщение WM_COMMAND или WM_SYSCOMMAND, а затем отправляет сообщение оконной процедуре указанного окна. Ниже следующая иллюстрация показывает, как обрабатываются ускорители.
(схема обработки ускорителя)
Сообщение WM_COMMAND включает в себя идентификатор ускорителя, который заставляет TranslateAccelerator создавать сообщение. Оконная процедура проверяет идентификатор, чтобы установить источник сообщения, а затем обрабатывает сообщение соответственно.
Таблицы клавиш-ускорителей существуют на двух различных уровнях. Система обслуживает отдельно взятую таблицу клавиш-ускорителей всей системы, которая применяется ко всем прикладным программам. Приложение не может изменить системную таблицу клавиш-ускорителей. Описание ускорителей, обеспечиваемых системной таблицей клавиш-ускорителей, см. в статье Назначения нажатий клавиш ускорителя.
Система обслуживает также и таблицы клавиш-ускорителей каждого приложения. Прикладная программа может определить любое заданное число таблиц клавиш-ускорителей для использования своими собственными окнами. Уникальный 32-разрядный дескриптор (HACCEL) идентифицирует каждую таблицу. Однако, только одна таблица клавиш-ускорителей может быть активна одновременно для указанного потока. Дескриптор таблицы клавиш-ускорителей передается в функцию TranslateAccelerator, чтобы установить, которая таблица клавиш-ускорителей активна для потока. Активная таблица клавиш-ускорителей может измениться в любое время, передавая другой дескриптор таблицы в TranslateAccelerator.