Учитывая, что основная подпрограмма может быть только одна, разработчики предусмотрели возможность установки трех альтернативных подпрограмм. Их принципиальное отличие в том, что в момент изменения состояния мыши должна быть нажата хотя бы одна из трех специальных клавиш.
Функция 18 (set Alternate Event Handier) устанавливает альтернативную подпрограмму, реагирующую на изменения состояний мыши при условии, что нажата одна из трех клавиш — <Alt>, <Ctrl>, <Shift>, или любая их комбинация. Перед обращением к драйверу полный адрес подпрограммы указывается в регистрах es:dx, а код маски помещается в младший байт регистра сх. Состояние его разрядов (0 или 1) соответствует наличию или отсутствию следующих событий:
разряд 0 — перемещение мыши; | разряд 1 — левая кнопка нажата; |
разряд 2 — левая кнопка отпущена; | разряд 3 — правая кнопка нажата; |
разряд 4 — правая кнопка отпущена; | разряд 5 — нажата клавиша <Shift>; |
разряд 6 — нажата клавиша <Ctrl>; | разряд 7 — нажата клавиша <Alt>. |
Три старших разряда маски отведены для указания одной из клавиш или их сочетания. Драйвер анализирует их не независимо друг от друга, а как трехразрядный код. Поэтому установка любых двух старших разрядов соответствует одновременному нажатию двух клавиш, а установка трех разрядов одновременному нажатию трех клавиш <Alt>+<Ctrl>+<Shift>.
Указание в коде маски, по крайней мере, одной клавиши обязательно. Если очищены все три старших разряда кода маски, то драйвер отвергает попытку установить подпрограмму. При этом он возвращает в регистре ах код OFFFFh.
Коды событий, связанных с изменением состояния мыши, занимают в маске пять младших разрядов, места для средней кнопки не хватает. Если установлены все младшие разряды, то подпрограмма будет вызываться при любом изменении состояния мыши, если одновременно нажата клавиша, указанная в старших разрядах кода маски.
Например, если код маски 9Fh, то подпрограмма будет вызываться, если нажата клавиша <Alt> и мышь перемещается, либо изменяется состояние ее левой или правой кнопок.
Особым случаем является очищенное состояние пяти младших разрядов кода маски, оно запрещает обслуживание установленной альтернативной подпрограммы. Обращаем ваше внимание на то, что должны быть очищены только пять младших разрядов. Например, если подпрограмма работала с клавишей <АН>, то для ее запрета выполняются две следующие команды:
mov сх, 8Oh ; код маски при работе с клавишей <Alt> Mouse 18 ; запрос функции 18
Перед завершением задачи надо обязательно запретить обслуживание как основной, так и альтернативных подпрограмм, если они были установлены.
Функция 19 (Query Alternate Event Handler) проверяет факт установки альтернативной подпрограммы, маска для поиска указывается в регистре сх. Если подпрограмма была установлена, то драйвер возвращает ее адрес в регистрах es:dx, в противном случае он помещает в регистрах код OFFFFh.