Установить драйвер событий
Функция 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 будет указывать на сегмент данных драйвера мыши, а не на сегмент данных вашей программы.
Драйвер событий может также организовать очередь событий, записывая в эту очередь состояние мыши на момент появления события и время появления события. Прикладная программа будет затем извлекать события из очереди и анализировать их.