Аппаратное обеспечение IBM PC

       

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


На входе: AX = 0005h;

BX = клавиша, при нажатии которой запоминается состояние мыши: 0 - левая; 1 - правая; 2 - средняя.

На выходе: AX = состояние клавиш мыши:

бит 0 = 1 - нажата левая клавиша; бит 1 = 1 - нажата правая клавиша; бит 2 = 1 - нажата средняя клавиша (для мыши системы Mouse Systems);

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

CX = координата X (по горизонтали);

DX = координата Y (по вертикали).

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

Функция для определения состояния мыши при нажатии на заданную клавишу:

/** *.Name ms_querp *.Title Определение состояния мыши при нажатии на клавишу * *.Descr Эта функция определяет координаты курсора мыши * и состояние клавиш в момент нажатия на заранее * заданную клавишу. * Определенное состояние записывается в структуру * MOUSE_STATE, описанную в файле sysp.h: * * typedef struct _MOUSE_STATE_ { * unsigned bottoms; * unsigned x; * unsigned y; * } MOUSE_STATE; * * Адрес структуры передается функции в качестве * параметра. * *.Proto int ms_querp(MOUSE_STATE *state, int bottom); * *.Params MOUSE_STATE *state - указатель на структуру, * описывающую состояние мыши. * * int bottom - параметр определяет клавишу, * при нажатии на которую необходимо * запомнить состояние: * 0 - левая клавиша, * 1 - правая клавиша, * 2 - средняя клавиша. * *.Return Функция возвращает количество нажатий на * заданную клавишу с момента последнего * вызова этой функции. * *.Sample ms_samp3.c **/

#include <stdio.h> #include <dos.h> #include <conio.h> #include "sysp.h"

union REGS reg;

int ms_querp(MOUSE_STATE *state, int bottom) {

reg.x.ax = 5; reg.x.bx = bottom; int86(0x33,&reg,&reg);

state->bottoms = reg.x.ax; state->x = reg.x.cx; state->y = reg.x.dx;

return(reg.x.bx); }



Содержание раздела