logo
несколько программ / bsp33

Установить драйвер событий

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

Драйвер событий может также организовать очередь событий, записывая в эту очередь состояние мыши на момент появления события и время появления события. Прикладная программа будет затем извлекать события из очереди и анализировать их.