Меню Рубрики

Установка курсора в заданной точке

Int 33h — Работа с мышью.

Наиболее распространенным устройством ввода графической информации в ПЭВМ является мышь. При перемещении мыши и/или нажатии/отпускании кнопок мышь передает информацию в компью-тер о своих параметрах (величине перемещения и статусе кнопок). Существует много различных типов устройства типа мышь, отличаю-щихся как по принципу работы (механическая, оптомеханическая и оптическая), так и по способу общения (протоколу) с ПЭВМ. Для достижения некоторой унификации каждая мышь поставляется обычно вместе со своим драйвером — специальной программой, по-нимающей данный конкретный тип мыши и предоставляющей неко-торый (почти универсальный) интерфейс прикладным программам. При этом вся работа с мышью происходит через драйвер, который от-слеживает перемещения мыши, нажатие и отпускание кнопок мыши и обеспечивает работу с курсором мыши — специальным маркером на экране (обычно в виде стрелки), дублирующим все передвижения мы-ши и позволяющим пользователю указывать мышью на те или иные объекты на экране.

Работа с мышью реализуется через механизм прерываний. При-кладная программа осуществляет прерывание 33h, передавая в регист-рах необходимые параметры, и в регистрах же получает значения, воз-вращенные драйвером мыши.

Приводим набор функций для работы с мышью в соответствии со стандартом фирмы Microsoft. Ниже приведены используе-мые файлы Mouse.h и Mouse.cpp.

Инициализация и проверка наличия мыши

Функция ResetMouse производит инициализацию мыши и воз-вращает ненулевое значение, если мышь обнаружена.

Высветить на экране курсор мыши

Функция ShowMouseCursor выводит на экран курсор мыши. При этом курсор перемещается синхронно с перемещениями самой мыши.

Функция Hide Mouse Cursor убирает курсор мыши с экрана. Одна-ко при этом драйвер мыши продолжает отслеживать ее перемещения, причем к этой функции возможны вложенные вызовы. Каждый вызов функции HideMouseCursor уменьшает значение внутреннего счетчика драйвера на единицу, каждый вызов функции ShowMouseCursor уве-личивает счетчик. Курсор мыши виден только, когда значение счетчи-ка равно 0 (изначально счетчик равен -1).

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

Прочесть состояние мыши (ее координаты и состояние кнопок)

Функция ReadMouse State возвращает состояние мыши в полях структуры MouseState. Поля х и у содержат текущие координаты курсора в пикселах, поле Buttons определяет, какие кнопки нажаты. Установленный бит 0 соответствует нажатой левой кнопке, бит 1 -правой, и бит 2 — средней.

Передвинуть курсор мыши в точку с заданными координатами

Функция MoveMouseCursor служит для установки курсора мыши в точку с заданными координатами.

Установка области перемещения курсора

При необходимости можно ограничить область перемещения мы-ши по экрану. Для задания области возможного перемещения курсора по горизонтали служит функция SetHorzMouseRange, для задания об-ласти перемещения по вертикали — функция SetVertMouseRange.

Задание формы курсора

В графических режимах высокого разрешения (640 на 350 пиксе-лов и выше) курсор задается двумя масками 16 на 16 бит и смещением координат курсора от верхнего левого угла масок. Каждую из масок можно трактовать как изображение, составленное из пикселов белого (соответствующий бит равен 1) и черного (соответствующий бит равен 0) цветов. При выводе курсора на экран сначала на содержимое экра-на накладывается (с использованием операции AND_PUT) первая маска, называемая иногда AND-маской, а затем на то же самое место накладывается вторая маска (с использованием операции XOR_PUT). Все необходимые параметры для задания курсора мыши содержатся в полях структуры CursorShape. .Устанавливается форма курсора при помощи функции SetMouseShape.

Установка области гашения

Иногда желательно задать на экране область, при попадании в которую курсор мыши автоматически гасится. Для этого использу-ется функция SetHideRange. Но при выходе курсора из области гаше-ния он не восстанавливается. Поэтому для восстановления нормаль-ной работы курсора необходимо вызвать функцию ShowMouseCursor, независимо от того, попал ли курсор в область гашения или нет.

Установка обработчика событий

Вместо того, чтобы все время опрашивать драйвер мыши, можно передать драйверу адрес функции, которую нужно вызывать при на-ступлении заданных событий. Для установки этой функции следует воспользоваться функцией Set Mouse Handler, где в качестве первого параметра выступает указатель на функцию, а второй параметр задает события, при наступлении которых следует вызвать переданную функцию. События задаются посредством битовой маски. Возможные события определяются при помощи символических констант MOUSE_MOVE_MASK, MOUSE_LBUTTON_PRESS и других. Тре-буемые условия соединяются побитовой операцией ИЛИ, Передавае-мая функция получает 4 параметра — маску события, повлекшего за собой вызов функции, маску состояния кнопок мыши и текущие ко-ординаты курсора. По окончании работы программы необходимо обя-зательно убрать обработчик событий (при помощи функции RemoveMouseHandler).

Ниже приводится пример простейшей программы, устанавливаю- щей обработчик событий мыши на нажатие правой кнопки мыши и задающей свою форму курсора.

источник

Установка курсора в заданной точке

Драйвер мыши, независимо от того, реализован он через устанавливаемый драйвер или резидентную программу, устанавливает в операционной системе MS-DOS обработчик прерывания INT 33h. Этот обработчик выполняет все операции, связанные с обслуживанием мыши:

· сброс мыши и установка драйвера в исходное состояние;

· включение и выключение курсора мыши;

· установка курсора в определенное место экрана;

· определение текущих координат курсора и текущего состояния клавиш;

· определение координат курсора и состояния клавиш в момент нажатия на клавишу и в момент отпускания клавиши;

· определение области на экране, в пределах которой может перемещаться курсор;

· определение области на экране, в пределах которой курсор не будет виден;

· определение формы графического и текстового курсоров;

· определение величины перемещения мыши в сотых долях дюйма;

· подключение к драйверу процедуры, определенной в программе, получающей управление при нажатии на заданную клавишу или при перемещении мыши;

· запоминание и восстановление состояния драйвера;

· управление эмуляцией светового пера;

· управление скоростью движения курсора;

· указание или определение используемой страницы видеопамяти;

· управление драйвером мыши

Приведем подробное описание всех функций прерывния INT 33h, используемых при работе с мышью.

Инициализация мыши

Эта функция с кодом 00h выполняет аппаратный сброс мыши и программную установку драйвера мыши в начальное состояние. Заметим, что с помощью функции 21h можно выполнить установку драйвера в исходное состояние, не выполняя аппаратного сброса мыши.

BX = количество клавиш у мыши

Если на выходе из прерывания регистр AX содержит значение 0000h, значит драйвер мыши не установлен. Если же содержимое этого регистра равно 0FFFFh, драйвер имеется и вы можете использовать другие функции для работы с мышью.

Читайте также:  Установка концевик на логане

В регистре BX возвращается количество клавиш мыши:

Больше или меньше, чем две

Мышь системы Mouse Systems, имеет три клавиши

При установке драйвера мыши в исходное состояние для программ, работающих в текстовом режиме, выполняются следующие действия:

· курсор перемещается в центр экрана и гасится;

· разрешается перемещение курсора по всей поверхности экрана, причем на экране отсутствуют зоны, в которых курсор является невидимым;

· устанавливается режим отображения курсора — инвертирование атрибута символа, на который указывает курсор;

· для изображения курсора выбирается нулевая страница видеопамяти;

· разрешается эмуляция светового пера (хотя это вам едва ли пригодится);

· устанавливается начальная скорость перемещения курсора

Включить курсор мыши

Функция 01h позволяет включать или выключать курсор мыши:

Для управления видимостью курсора драйвер мыши использует внутренний счетчик. Этот счетчик можно увеличивать, вызывая функцию 01h прерывания INT 33h, или уменьшать при помощи функции 02h этого же прерывания.

После инициализации драйвера функцией 00h счетчик устанавливается равным -1. После первого вызова функции 01h счетчик становится равным 0. При этом курсор мыши становится видимым, его можно перемещать по экрану.

Если счетчик равен 0, то следующие вызовы функции 01h игнорируются драйвером. Для того, чтобы погасить курсор, используйте функцию 02h, которая при вызове уменьшает каждый раз содержимое счетчика на единицу.

Функция 01h сбрасывает область, в которой курсор не отображается (если такая область была ранее установлена функцией 10h).

Выключить курсор мыши

Функция 02h уменьшает на единицу счетчик видимости курсора. Если содержимое счетчика становится равным -1, изображение курсора пропадает с экрана.

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

Это связано с тем, что драйвер мыши запоминает старое значение атрибута символа, на который указывал курсор до обновления содержимого видеопамяти. Вы изменили атрибут, записав новое значение непосредственно в экранную память. Теперь, если установить курсор мыши на другой символ, изображение старого символа будет испорчено — появится прямоугольник (как бы еще одно изображение курсора мыши).

Программа MSCURSOR

Приведем исходный текст программы MSCURSOR (листинг 3.1), демонстрирующую применение описанных выше функций. Программа инициализирует мышь, делает видимым курсор мыши и прячет курсор после того как пользователь нажмет любую клавишу.

Листинг 3.1. Файл mscursor\mscursor.c

Определить положение курсора

Функция 03h возвращает текущие координаты курсора мыши и состояние клавиш.

BX = состояние клавиш мыши;

В зависимости от того, была ли нажата какая-либо клавиша мыши в момент вызова функции, в регистре BX могут быть установлены следующие флаги:

Установленный бит регистра BX

Клавиша, которая была нажата

Для графических режимов координаты располагаются в различных диапазонах, в зависимости от текущего режима видеоадаптера:

Диапазон координат по оси X

Диапазон координат по оси Y

Программы, работающие в текстовом режиме, должны разделить полученные координаты на 8 (как координату X, так и координату Y).

Программа MSGCURS

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

Листинг 3.2. Файл msgcurs\msgcurs.c

Заметим, что использование функции 03h — не самый лучший способ работы с мышью. Программа должна постоянно следить за координатами курсора или за состоянием клавиш. Это может привести к непроизводительным затратам процессорного времени на опрос состояния.

Позже мы рассмотрим другие способы определения состояния мыши.

Установить курсор

Обычно курсор мыши устанавливает не программа, а пользователь. Однако с помощью функции 04h программа тоже может установить курсор в заданную позицию.

CX = новая координата X курсора;

DX = новая координата Y курсора

Для текстового режима устанавливаемые номера строки и столбца должны быть умножены на 8.

В том случае, когда программа пытается установить курсор в область, где курсор невидим (эта область задается функцией 10h), то она сможет это сделать. Курсор при этом исчезнет с экрана, что не всегда желательно.

Если область для перемещения курсора была ограничена при помощи функций 07h или 08h, то курсор будет вести себя следущим образом. При попытке установить курсор за границу области ограничения, он будет установлен в точку, которая находится внутри границы на минимальном расстоянии от точки, заданной при вызове функции.

Определить положение курсора при нажатии клавиши

BX = клавиша, при нажатии которой запоминается состояние мыши:

AX = состояние клавиш мыши;

BX = количество нажатий на заданную клавишу. Это значение обнуляется после вызова функции;

В зависимости от того, была ли нажата какая-либо клавиша мыши в момент вызова функции, в регистре AX могут быть установлены следующие флаги:

Установленный бит регистра AX

Клавиша, которая была нажата

В отличие от функции 03h эта функция возвращает программе не текущее состояние мыши, а запомненное в момент последнего нажатия на клавишу, заранее определенную при вызове функции. Она также возвращает количество нажатий на заданную клавишу, которое вы можете использовать для обнаружения двойных щелчков.

Определить положение курсора при отпускании клавиши

Функция 06h возвращает программе состояние мыши, запомненное в момент отпускания клавиши, которая была заранее определена при вызове функции. Она также возвращает количество отпусканий заданной клавиши.

BX = клавиша, при отпускании которой запоминается состояние мыши:

AX = состояние клавиш мыши;

BX = количество нажатий на заданную клавишу. Это значение обнуляется после вызова функции;

Формат регистра AX, определяющий состояние клавиш мыши, такой же как и для функции 05h.

Задать диапазон движения курсора по горизонтали

Функция 07h позволяет ограничить диапазон перемещений курсора мыши по горизонтали:

CX = минимальная координата X;

DX = максимальная координата X

Задать диапазон движения курсора по вертикали

Функция 08h позволяет ограничить диапазон перемещений курсора мыши по вертикали.

CX = минимальная координата Y;

DX = максимальная координата Y

Задать форму курсора в графическом режиме

С помощью функции 09h программа, работающая в графическом режиме, может изменить форму курсора мыши и положение точки внутри изображения курсора, координаты которой используются в качестве координат курсора остальными функциями.

BX = номер позиции точки-указателя графического курсора (от -16 до 16);

CX = номер строки точки-указателя (от -16 до 16);

ES:DX = указатель на растровое изображение курсора

Регистры ES:DX указывают на область памяти размером 64 байт. Эта область состоит из двух массивов длиной по 32 байт. Первый массив представляет собой логическую маску размером 16х16 бит, которая накладывается на участок видеопамяти с использованием логической операции “И”. Второй массив — тоже маска размером 16х16 бит, но она накладывается с использованием логической операции “Исключающее ИЛИ”, инвертируя отдельные точки изображения.

Читайте также:  Установка в здании диафрагм жесткости

Номера позиции и строки точки-указателя, устанавливаемые по умолчанию, равны 0 (BX=CX=0). Это соответствует верхней левой точке в изображении курсора. Значения BX=CX=15 соответствуют нижней правой точке.

Программа MSGFORM

Мы подготовили исходный текст программы MSGFORM, изменяющий форму курсора в графическом режиме (листинг 3.3).

Листинг 3.3. Файл msgform\msgform.c

Задать форму курсора в текстовом режиме

С помощью функции 0Ah программа может изменять форму курсора мыши в текстовом режиме.

0 — определяемый программно;

1 — определяемый аппаратно;

CX = маска экрана (для BX=0) или начальная строка курсора (для BX=1);

DX = маска курсора (для BX=0) или конечная строка курсора (для BX=1)

В зависимости от содержимого регистра BX драйвер мыши использует курсор, определяемый аппаратными средствами, либо курсор, определяемый программно. По умолчанию используется “программный курсор”, который отображается в виде символа с инвертированным значением атрибута. Курсор, сформированный аппаратными средствами, выглядит аналогично обычному текстовому курсору, его форма — прямоугольник. Размер этого прямоугольника можно задавать при помощи регистров CX и DX.

Для курсора, определяемого программно, вначале выполняется операция логического “И” над содержимым видеопамяти в том месте, куда указывает курсор, и маской экрана. Затем выполняется операция “Исключающее ИЛИ” с маской курсора.

Младший байт масок соответствует коду ASCII символа, старший — это байт атрибута символа.

Значения, используемые по умолчанию — BX=7700h, CX=FFFFh.

Если вам надо изменить цвет курсора, не меняя его форму, задайте CX=00FFh, BX=xx00h, где xx определяет цвет (смотри описание формата байта атрибутов в 21 томе «Библиотеки системного программиста», который называется «Программирование видеоадаптеров»).

Программа MSTFORM

Приведем исходный текст программы MSTFORM (листинг 3.4), создающую курсор в виде вертикальной стрелки, направленной вверх, на синем фоне.

Листинг 3.4. Файл mstform\mstform.c

Определить содержимое счетчиков перемещения

Функция 0Bh позволяет определить относительное перемещение мыши с момента последнего вызова этой функции. Результат возвращается в указанных выше регистрах. Для измерения перемещения используется единица mickey — “мики”. Один мик соответствует 0.005 дюйма (то есть 1/200 дюйма).

CX = перемещение по горизонтали с момента последнего вызова функции;

DX = перемещение по вертикали с момента последнего вызова функции

Отрицательные значения перемещения означают движение влево и вверх, положительные — вправо и вниз.

Для преобразования миков в пикселы, соответствующие точкам экрана, можно использовать функцию 1Bh, которая будет описана позже.

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

Функция 0Ch позволяет программе создать свой собственный драйвер (обработчик) событий, связанных с перемещением мыши, а также с нажатием или отпусканием клавиш мыши.

ES:DX = адрес подключаемого драйвера событий

Биты маски вызова, передаваемой функции в регистре CX, определяют условие вызова драйвера событий:

Отпускание правой клавиши

Отпускание средней клавиши

Если записать в регистр CX значение 7Fh, драйвер будет вызываться при возникновении любого события, а если 00h – драйвер будет отключен.

Адрес процедуры драйвера передается при вызове функции в регистровой паре ES:DX. Драйвер должен быть оформлен в виде процедуры типа FAR, завершающейся командой дальнего возврата RETF.

Когда драйвер получает управление, в регистрах процессора содержатся следующие значения:

Маска вызова, такая же, как и при вызове функции 0Ch

Координата X курсора мыши

Координата Y курсора мыши

Относительное перемещение мыши по горизонтали в миках

Относительное перемещение мыши по вертикалив миках

Сегмент данных драйвера мыши

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

Отметим, что если вам необходимо отключить драйвер, выполните повторный вызов функции 0Ch, записав в регистр CX нулевое значение. Если ваша программа, устанавливающая собственный драйвер событий, завершает свою работу и передает управление MS-DOS, предварительно она обязательно должна отключить драйвер событий.

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

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

Программа MSDRIVER

Программа MSDRIVER иллюстрирует способ работы с драйвером событий.

Исходный текст драйвера событий, составленный на языке ассемблера, представлен в листинге 3.5.

Листинг 3.5. Файл msdriver\handler.asm

При вызове этот драйвер вызове устанавливает глобальную переменную _ms_flag в единицу, затем переписывает содержимое всех нужных регистров в соответствующие глобальные переменные.

Программа, установив драйвер событий и сбросив флаг _ms_flag, может выполнять какие-либо действия (например, вывод на экран движущегося изображения), постоянно проверяя флаг _ms_flag. Как только произойдет какое-либо событие (нажатие или отпускание клавиши мыши, перемещение мыши) драйвер событий установит флаг в единицу. Программа при этом может узнать состояние мыши, прочитав содержимое глобальных переменных _ms_bx, _ms_dx, и т.д.

Исходный текст программы MSDRIVER представлен в листинге 3.6.

Листинг 3.6. Файл msdriver\msdriver.с

Включить эмуляцию светового пера

Световое перо теперь можно увидеть разве лишь в музее. Однако вы можете заменить световое перо на мышь, если ваша программа использует световое перо (например, она написана на языке Бейсик и вызывает функцию PEN). Для включения эмуляции светового пера вы можете воспользоваться функцией 0Dh:

После включения режима эмуляции драйвер запоминает координаты курсора в момент, когда пользователь нажимает на клавиши мыши. Эти координаты могут быть впоследствии считаны функцией PEN или функцией 04h прерывания INT 10h, предназначенной для работы со световым пером.

Выключить эмуляцию светового пера

Функция 0Eh выключает режим эмуляции светового пера.

Задать скорость перемещения курсора мыши

Функция 0Fh определяет чуствительность мыши к перемещению по поверхности стола, то есть устанавливает соответствие между величиной перемещения мыши по столу и величиной перемещения курсора мыши по экрану.

CX = количество миков на 8 точек по горизонтали;

DX = количество миков на 8 точек по вертикали

При инициализации драйвера мыши используются следующие значения: CX=8, DX=16.

Установить область исключения для курсора

Функция позволяет задать на экране прямоугольную область, в которой автоматически выключается изображение курсора мыши — область исключения. Эта область отменяется функциями 01h (включить курсор мыши) и 00h (инициализация).

CX, DX = координаты (X, Y) верхнего левого угла области исключения;

Читайте также:  Установка плагина sketchup mac

SI, DI = координаты (X, Y) нижнего правого угла области исключения

Оператор может поместить курсор мыши в область исключения, при этом изображение курсора пропадет.

Основное назначение этой функции — предоставить программе возможность изменять содержимое области экрана, не выключая изображение курсора. Недостаток наличия области исключения – пользователь может потерять курсор мыши, если он случайно окажется в такой области.

Задать увеличенный графический курсор

Функция 12h позволяет задать увеличенный по размеру курсор мыши, но она определена только для мыши системы PC MOUSE.

BH = ширина курсора в словах;

CH = количество строк в изображении курсора;

BL = номер позиции точки-указателя графического курсора (от -16 до 16);

CL = номер строки точки-указателя (от -16 до 16);

ES:DX = указатель на растровое изображение курсора

Определить порог удвоения скорости

Если вы перемещаете мышь со скоростью, превышающей порог удвоения, заданный функцией 13h, аппаратура мыши удваивает величину перемещения. Таким образом, используя медленное перемещение мыши, вы можете точно устанавливать курсор на требуемый элемент изображения. Если вам необходимо переместить курсор на значительное расстояние по экрану, вы можете увеличить скорость перемещения мыши.

Формат вызова функции 13h приведен ниже:

DX = значение порога удвоения, мики в секунду

При инициализации устанавливается значение порога, равное 64 микам в секунду (1/3 дюйма в секунду). Если вам надо установить это значение, вы можете при вызове функции 13h задать DX=0.

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

Функция 14h аналогична функции 0Ch, однако ее основное назначение — временная замена драйвера событий. Например, подпрограмма в начале своей работы может установить свой драйвер событий, а перед завершением — активизировать драйвер, использовавшийся ранее.

ES:DX = адрес подключаемого драйвера событий

CX = маска предыдущего драйвера событий;

ES:DX = адрес предыдущего (заменяемого) драйвера событий

Определить размер буфера состояния драйвера

Если вам требуется временно сохранить состояние драйвера мыши, а затем восстановить его, вы можете воспользоваться специально предназначенными для этого функциями 16h и 17h. Для этих функций требуется буфер, в котором будет храниться состояние драйвера. Размер буфера можно определить с помощью функции 15h.

BX = размер буфера, требующийся для хранения состояния драйвера мыши

Когда может потребоваться запоминание и восстановление состояния драйвера? Например, при использовании мыши резидентными (TSR) программами желательно сохранить состояние драйвера перед началом работы TSR-программы и восстановить его перед завершением работы TSR-программы.

Сохранить состояние драйвера

Функция 16h позволяет записать состояние драйвера в буфер, размер которого должен быть определен с помощью функции 15h.

ES:DX = адрес буфера для записи состояния драйвера

Восстановить состояние драйвера

Функция 17h позволяет восстановить состояние драйвера из буфера, в который оно было записано при помощи функции 16h.

ES:DX = адрес буфера, содержащего состояние драйвера

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

Функция 18h предназначена для установки альтернативного драйвера событий:

ES:DX = адрес подключаемого драйвера событий

0018h — драйвер успешно установлен;

FFFFh — ошибка при установке драйвера

По сравнению с функцией 0Ch эта функция обеспечивает дополнительные возможности:

· возможность одновременной установки до трех драйверов событий, каждый из которых использует свою маску событий, задаваемых в регистре CX.

При попытке установить два драйвера с одной и той же маской событий функция возвращает в регистре AX код ошибки FFFFh. В этом случае вы можете использовать функцию 19h для получения адреса предыдущего установленного драйвера событий, отключить его и повторить попытку подключения своего драйвера.

Функция 18h может применяться для отключения драйвера событий, если в регистрах ES:DX указать его адрес и при этом задать в регистре CX значение маски, равное 0.

Получить адрес альтернативного драйвера событий

Функция 19h предназначена для получения адреса драйвера событий с заданной маской событий. Получив адрес, вы можете установить новый драйвер, использующий эту же маску.

CX = маска событий, для которой требуется получить адрес драйвера

CX = маска событий или 0000h, если заданной маске не соответствует ни один установленный драйвер событий;

ES:DX = адрес драйвера событий, использующий заданную маску событий

Установить чувствительность мыши

Функция 1Ah является комбинацией функций 0Fh и 13h. Она позволяет одновременно устанавливать чувствительность мыши и порог удвоения скорости.

BX = горизонтальная чувствительность в миках на пиксел;

CX = вертикальная чувствительность в миках на пиксел;

DX = значение порога удвоения, мики в секунду

Определить чувствительность мыши

Функция 1Bh позволяет определить текущие значения для чувствительности мыши и порога удвоения.

BX = горизонтальная чувствительность в миках на пиксел;

CX = вертикальная чувствительность в миках на пиксел;

DX = значение порога удвоения, мики в секунду

Установить частоту прерываний для Inport Mouse

Мышь периодически вырабатывает сигнал прерывания, по которому драйвер считывает текущее состояние мыши. С помощью функции 1Ch вы можете изменять частоту появления прерываний, но только для мыши системы Inport Mouse (тип мыши нетрудно определить с помощью функции 24h).

BX = код скорости прерываний:

2 — 30 прерываний в секунду;

4 — 50 прерываний в секунду;

8 — 100 прерываний в секунду;

16 — 200 прерываний в секунду

Чем больше частота прерываний, тем больше точность определения состояния мыши.

Установить номер страницы видеопамяти

Функция 1Dh задает номер страницы видеопамяти, на которой будет отображаться курсор мыши. По умолчанию для отображения используется страница 0.

BX = номер страницы видеопамяти

Определить номер страницы видеопамяти

Функция 1Eh возвращает номер страницы видеопамяти, на которой в настоящее время отображается курсор мыши.

BX = номер страницы видеопамяти

Отключить драйвер мыши

После вызова функции 1Fh драйвер мыши полностью отключается. Вектор прерывания INT 33h остается определенным, однако теперь выполняется только одна функция прерывания INT 33h — функция 21h (программный сброс мыши).

FFFFh — отключение невозможно;

ES:DX = адрес предыдущего драйвера мыши

Функцию 1Fh удобно использовать для временной замены драйвера на собственную систему обслуживания мыши. Сначала вы отключаете драйвер функцией 1Fh, запоминая адрес предыдущего драйвера, возвращаемого в регистрах ES:DX. Затем устанавливаете собственную систему обслуживания мыши, а после ее использования — восстанавливаете значение этого адреса.

Восстановить драйвер мыши

Функция 20h восстанавливает связь между мышью и драйвером, отключенную вызовом функции 1Fh.

Сбросить драйвер мыши

Функция 21h аналогична функции 00h, но она не выполняет аппаратный сброс оборудования мыши.

0021h — драйвер сброшен успешно;

FFFFh — невозможно сбросить драйвер (например, из-за того что драйвер не установлен);

BX = количество клавиш на корпусе мыши

Определить тип мыши

Функция 24h дает информацию о типе используемой мыши, версии драйвера мыши и об используемом номере прерывания.

BH = верхний (major) номер версии драйвера;

источник

Добавить комментарий

Adblock
detector