Установить драйвер событий
Функция 0Ch позволяет программе создать свой собственный драйвер (обработчик) событий, связанных с перемещением мыши, а также с нажатием или отпусканием клавиш мыши.
| Регистры на входе: | AX = 000Ch
CX = маска вызова; ES:DX = адрес подключаемого драйвера событий | ||
| Регистры на выходе: | Регистры не используются |
Биты маски вызова, передаваемой функции в регистре CX, определяют условие вызова драйвера событий:
| Бит маски вызова | Когда выполняется вызов | ||
| 0 | Перемещение мыши | ||
| 1 | Нажатие левой клавиши | ||
| 2 | Отпускание левой клавиши | ||
| 3 | Нажатие правой клавиши | ||
| 4 | Отпускание правой клавиши | ||
| 5 | Нажатие средней клавиши | ||
| 6 | Отпускание средней клавиши |
Если записать в регистр CX значение 7Fh, драйвер будет вызываться при возникновении любого события, а если 00h – драйвер будет отключен.
Адрес процедуры драйвера передается при вызове функции в регистровой паре ES:DX. Драйвер должен быть оформлен в виде процедуры типа FAR, завершающейся командой дальнего возврата RETF.
Когда драйвер получает управление, в регистрах процессора содержатся следующие значения:
| Регистр | Описание | ||
| AX | Маска вызова, такая же, как и при вызове функции 0Ch | ||
| BX | Состояние клавиш мыши:
бит 0 - левая клавиша; бит 1 - правая клавиша; бит 2 - средняя клавиша | ||
| CX | Координата X курсора мыши | ||
| DX | Координата Y курсора мыши | ||
| SI | Относительное перемещение мыши по горизонтали в миках | ||
| DI | Относительное перемещение мыши по вертикалив миках | ||
| DS | Сегмент данных драйвера мыши |
Так как регистр DS при вызове драйвера событий содержит сегмент данных драйвера мыши, ваш драйвер событий должен позаботиться о правильной установке этого регистра. Однако драйвер событий не обязан сохранять и восстанавливать содержимое регистра DS и других регистров процессора.
Отметим, что если вам необходимо отключить драйвер, выполните повторный вызов функции 0Ch, записав в регистр CX нулевое значение. Если ваша программа, устанавливающая собственный драйвер событий, завершает свою работу и передает управление MS-DOS, предварительно она обязательно должна отключить драйвер событий.
Составление программы драйвера событий имеет некоторые особенности. Драйвер событий вызывается не из программы пользователя, а из драйвера мыши. При этом сегментный регистр DS будет указывать на сегмент данных драйвера мыши, а не на сегмент данных вашей программы.
Драйвер событий может также организовать очередь событий, записывая в эту очередь состояние мыши на момент появления события и время появления события. Прикладная программа будет затем извлекать события из очереди и анализировать их.