- •Аннотация
 - •Введение
 - •Благодарности
 - •Авторский компакт-диск
 - •Как связаться с авторами
 - •1 Определение конфигурации компьютера
 - •Определение конфигурации с помощьюBios
 - •Наличие нмд
 - •Наличие арифметического сопроцессора
 - •Начальный режим работы видеоадаптера
 - •Стандартная оперативная память
 - •Расширенная оперативная память
 - •ПрограммаHdwcfg
 - •Код модели компьютера и версияBios
 - •ПрограммаBiosinfo
 - •Конфигурация в памяти cmos
 - •00H - 0Dh - область часов реального времени
 - •0Eh - байт диагностики
 - •0Fh - байт отключения
 - •10H - тип накопителей нгмд
 - •11H - зарезервировано дляIbm pc/at, тип нмд дляIbm ps/2
 - •12H - тип первого и второго нмд
 - •13H - зарезервировано
 - •14H - конфигурация оборудования
 - •15H-16h - объем стандартной оперативной памяти
 - •ПрограммаCmosshow
 - •Определение типа центрального процессора
 - •МоделиIntel 8086/8088
 - •Модель Intel 80286
 - •МодельIntel 80386
 - •МодельIntel 80486
 - •Команда cpuid
 - •ПрограммаCpuinfo
 - •2 Клавиатура
 - •Как работает клавиатура
 - •Клавиатурная матрица
 - •Скан-код клавиши
 - •КодAscii нажатой клавиши
 - •Режим автоповтора
 - •Типы клавиатур
 - •Порты для работы с клавиатурой
 - •КомпьютерIbm pc/xt
 - •Современные компьютеры
 - •ПрограммаKbdled
 - •Аппаратное прерывание клавиатуры
 - •Стандартный обработчик прерывания int 09h
 - •Буфер клавиатуры
 - •Переключающие клавиши
 - •Средства bios для работы с клавиатурой
 - •Чтение символа с ожиданием
 - •ПрограммаKbdscan
 - •Проверка буфера на наличие в нем символов
 - •ПрограммаChkbuf
 - •Получение состояния переключающих клавиш
 - •Установка временных характеристик клавиатуры
 - •Запись символов в буфер клавиатуры
 - •Чтение символа с ожиданием для 101-клавишной клавиатуры
 - •Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
 - •Получение состояния переключающих клавиш для 101-клавишной клавиатуры
 - •Режимы работы клавиатуры
 - •Сравнение режимов
 - •Изменение режима
 - •Средства ms-dos для работы с клавиатурой
 - •Буферизованный ввод с эхо-выводом
 - •Буферизованный ввод без эхо-вывода
 - •Нефильтрованный ввод без эхо-вывода
 - •Вводс консоли и вывод на консоль
 - •Ввод строки символов
 - •Проверка состояния стандартного ввода
 - •Сброс буфера клавиатуры
 - •Клавиатурные функции стандартной библиотеки c
 - •Функции getch и getche
 - •ПрограммаKbdascii
 - •Функцияkbhit
 - •ПрограммаKbdhit
 - •Функция cgets
 - •Функция gets
 - •Функция scanf
 - •Как устроена мышь?
 - •Драйверы мыши в ms-dos
 - •Прерывание для обслуживания мыши
 - •Инициализация мыши
 - •Включить курсор мыши
 - •Выключить курсор мыши
 - •ПрограммаMscursor
 - •Определить положение курсора
 - •ПрограммаMsgcurs
 - •Установить курсор
 - •Определить положение курсора при нажатии клавиши
 - •Определить положение курсора при отпускании клавиши
 - •Задать диапазон движения курсора по горизонтали
 - •Задать диапазон движения курсора по вертикали
 - •Задать форму курсора в графическом режиме
 - •ПрограммаMsgform
 - •Задать форму курсора в текстовом режиме
 - •ПрограммаMstform
 - •Определить содержимое счетчиков перемещения
 - •Установить драйвер событий
 - •ПрограммаMsdriver
 - •Включить эмуляцию светового пера
 - •Выключить эмуляцию светового пера
 - •Задать скорость перемещения курсора мыши
 - •Установить область исключения для курсора
 - •Задать увеличенный графический курсор
 - •Определить порог удвоения скорости
 - •Заменить драйвер событий
 - •Определить размер буфера состояния драйвера
 - •Сохранить состояние драйвера
 - •Восстановить состояние драйвера
 - •Установить альтернативный драйвер событий
 - •Получить адрес альтернативного драйвера событий
 - •Установить чувствительность мыши
 - •Определить чувствительность мыши
 - •Установить частоту прерываний для Inport Mouse
 - •Установить номер страницы видеопамяти
 - •Определить номер страницы видеопамяти
 - •Отключить драйвер мыши
 - •Восстановить драйвер мыши
 - •Сбросить драйвер мыши
 - •Определить тип мыши
 - •МышьMicrosoft IntelliMouse
 - •Проверка наличия мыши Microsoft IntelliMouse
 - •Проверка в среде Microsoft Windows 95 и Microsoft Windows nt версии 3.51
 - •Проверка в среде Microsoft Windows nt версии 4.0
 - •Определение величины свертки
 - •Определение величины свертки в среде Microsoft Windows 95 и Microsoft Windows nt версии 3.51
 - •Определение величины свертки в среде Microsoft Windows nt версии 4.0
 - •Сообщение msh_mousewheel
 - •Сообщение wm_mousewheel
 - •Другие сообщения от мыши Microsoft IntelliMouse
 - •ПриложениеRtfpad
 - •4 Часы реального времени
 - •Регистры часов реального времени
 - •Регистры счетчиков
 - •Регистр состоянияA
 - •Регистр состояния b
 - •Регистр состояния c
 - •Регистр состояния d
 - •Прерывание от часов реального времени
 - •Функции прерыванияInt 1Ah
 - •Сброс будильника
 - •ПрограммаRtcalarm
 - •5 Системный таймер
 - •Обработка прерываний таймера
 - •Микросхемы таймера 8253 и 8254
 - •Режимы работы таймера
 - •Режим однократного выполнения функций
 - •Работа с перезапуском
 - •Формат управляющего регистра
 - •Формат команды чтения слова состояния канала
 - •Формат слова состояния канала
 - •Последовательность действий
 - •ПрограммаTimerst
 - •Средства bios для работы с таймером
 - •Чтение счетчика таймера
 - •Установка счетчика таймера
 - •Установка таймера с сигнализацией
 - •Формирование задержки
 - •Второй способ проигрывания музыки
 - •Проигрывание музыки в фоновом режиме
 - •ПрограммаTmsound
 - •ПрограммаIosound
 - •ПрограммаRandom
 - •6 Асинхронный последовательный адаптер
 - •Основные понятия и термины
 - •Аппаратная реализация
 - •МикросхемаUart
 - •Разъемы адаптера
 - •Порты асинхронного адаптера
 - •Порт 3f8h
 - •Порт 3f9h
 - •Порт 3fAh
 - •Порт 3fBh
 - •Порт 3fCh
 - •Порт 3fDh
 - •Порт 3fEh
 - •Функции bios для работы с последовательным асинхронным адаптером
 - •Инииализация портов асинхронного адаптера
 - •Передача байта
 - •Прием байта
 - •Определение состояния асинхронного адаптера
 - •Программирование асинхронного адаптера
 - •Инициализация асинхронного адаптера
 - •Передача данных
 - •Прием данных
 - •ПрограммаComtest
 - •Использование прерываний
 - •7 Параллельный адаптер
 - •Порты параллельного адаптера
 - •Порт 378h
 - •Порт 37Ah
 - •Порт 379h
 - •Разъем параллельного адаптера
 - •Вывод байта на принтер через параллельный адаптер
 - •Функции bios для работы с принтером
 - •Печать символа
 - •Инициализация принтера
 - •Определение состояния принтера
 - •ПрограммаPrintfl
 - •Функции ms-dos для работы с принтером
 - •ФункцияMs-dos для вывода на принтер
 - •Система буферизованной печати
 - •Проверка установки системы буферизованной печати
 - •Запуск процесса печати файла
 - •Отмена печати файла
 - •Отмена печати всех файлов
 - •Определение состояния и блокировка системы буферизованной печати
 - •Разблокирование системы буферизованной печати
 - •Коды ошибок
 - •Программирование принтера
 - •Подключение принтера к компьютеру
 - •Установка переключателей конфигурации
 - •Программирование режимов работы принтера
 - •Инициализация принтера
 - •Контроллер прямого доступа ibm pc/xt
 - •Регистры каналов dma
 - •Порты 00h - 07h
 - •Порт 08h
 - •Порт 09h
 - •Порт 0Ah
 - •Порт 0Bh
 - •Порт 0Ch
 - •Порт 0Dh
 - •Порт 0Eh
 - •Порт 0Fh
 - •Порты 81h-8Fh
 - •Инициализация канала dma
 - •Контроллер прямого доступа ibm at
 - •Регистры каналовDma
 - •Регистры страниц
 - •Порты 0c0h - 0dFh
 - •Порты 0d0h-0dFh
 - •9 Устройство чтения cd-rom
 - •Драйвер устройства чтенияCd-rom
 - •РасширениеMscdex
 - •ФункцииMscdex
 - •Определение количества устройствCd-rom
 - •Получение списка устройств cd-rom
 - •Получение имени файла прав собственности
 - •Получение имени файла резюме
 - •Получение имени файла библиографической документации
 - •Чтение сектора оглавления компакт-диска
 - •Чтение сектора по абсолютному адресу
 - •Проверка устройства чтения cd-rom
 - •Определение версии mscdex
 - •Определение обозначения устройств чтения cd-rom
 - •Вызов драйвера cd-rom
 - •Работа через драйверCd-rom
 - •Заголовок запроса
 - •Команды драйвера cd-rom
 - •Инициализация
 - •ЧтениеIoctl Input
 - •Определение адреса заголовка драйвера cd-rom
 - •Определение положения головки
 - •Получение информации о звуковых каналах
 - •Чтение данных из устройства
 - •Определение состояния устройства
 - •Определение размера сектора
 - •Определение размера тома
 - •Проверка замены носителя данных
 - •Получение информации о компакт-диске
 - •Получение информации о дорожкекомпакт-диска
 - •Получение информации о канале q
 - •Получение информации о подканале
 - •Получение штрих-кода изготовителя компакт-диска
 - •Сброс входных буферов
 - •ЗаписьIoctl Output
 - •Извлечение компакт-диска
 - •Блокирование и разблокирование компакт-диска в устройстве
 - •Сброс устройства чтения cd-rom
 - •Управление звуковыми каналами
 - •Запись в устройство управляющей строки
 - •Чтение длинное с предварительной выборкой
 - •Проигрывание звуковой дорожки
 - •Остановка проигрывания звуковой дорожки
 - •Возобновление проигрывания звуковой дорожки
 - •ПрограммаCdinfo
 - •ПрограммаCdplay
 - •10 Арифметический сопроцессор
 - •Вещественные числа
 - •Целые числа
 - •Регистры сопроцессора
 - •Численные регистры
 - •Регистр тегов
 - •Регистр управления
 - •Регистр состояния
 - •Регистры указателя команды и указателя операнда
 - •Система команд сопроцессора
 - •Команды пересылки данных
 - •Запись в стек
 - •Извлечение из стека
 - •Копирование данных
 - •Загрузка констант
 - •Арифметические команды
 - •Команды сравнений чисел
 - •Трансцендентные команды
 - •Управляющие команды
 - •Программирование сопроцессора
 - •ПрограммаNpu1
 - •Обработка особых случаев
 - •Неточный результат
 - •Переполнение
 - •Антипереполнение
 - •Деление на нуль
 - •Недействительная операция
 - •Денормализованный операнд
 - •Ошибка в процессореPentium
 - •11 Расширенная память
 - •Основные понятия
 - •Установка драйвера himem.Sys
 - •Спецификация xms
 - •Проверка подключения драйвера
 - •Получение адреса управляющей программы
 - •Описание функций драйвера himem.Sys
 - •Получить версию xms
 - •Запросить область hma
 - •Освободить область hma
 - •Глобальное открывание линии a20
 - •Глобальное закрывание линии a20
 - •Освободить блок emb
 - •Копирование блоков emb
 - •Блокирование emb
 - •Разблокирование emb
 - •Получить информацию об идентификаторе блока emb
 - •Изменить размер emb
 - •Запросить область umb
 - •Освободить область umb
 - •Коды ошибок
 - •Ограничения при использовании области hma
 - •Примеры программ
 - •ПрограммаTesthma
 - •ПрограммаCallhma
 - •Предметный указатель
 - •Литература
 - •Оглавление
 - •1 Определение конфигурации компьютера 7
 - •2 Клавиатура 38
 - •3 Мышь 64
 - •4 Часы реального времени 102
 - •5 Системный таймер 113
 - •6 Асинхронный последовательный адаптер 132
 - •7 Параллельный адаптер 149
 - •8 Контроллер прямого доступа к памяти 162
 - •9 Устройство чтения cd-rom 170
 - •10 Арифметический сопроцессор 216
 - •11 Расширенная память 243
 
Определить тип мыши
Функция 24h дает информацию о типе используемой мыши, версии драйвера мыши и об используемом номере прерывания.
| 
			 Регистры на входе:  | 
			 AX = 0024h  | 
| 
			 Регистры на выходе:  | 
			 BH = верхний (major) номер версии драйвера; BL = нижний (minor) номер версии драйвера; CH = тип мыши: 1 - Bus Mouse; 2 - Serial Mouse; 3 - Inport Mouse; 4 - PS/2 Mouse; 5 - HP Mouse; CL = номер используемого прерывания (IRQ): 0 - IBM PS/2; 2, 3, 4, 5, 7 - IBM PC  | 
МышьMicrosoft IntelliMouse
В 1997 году Microsoft выпустила новую мышь с названием Microsoft IntelliMouse, добавив в нее принципиально новый орган управления – небольшое колесо, расположенное между левой и правой клавишами мыши. Это небольшое, на первый взгляд, усовершенствование намного упрощает работу пользователей с приложениями Windows, в которых нужно просматривать длинные документы или выполнять плавное масштабирование изображений.
Колесо имеет двойное назначение.
Во-первых, оно служит вместо третьей кнопки, которая есть в трехкнопочных мышах типа Mouse System и совместимых с ними. Ранее Microsoft упорно игнорировала третью кнопку в приложенияхWindows, однако как вы увидите, теперь положение несколько изменилось.
Во-вторых, вы можете вращать колесо в обоих направлениях без ограничения угла поворота, причем такое вращение имеет дискретный характер.
Приложение Windows может использовать колесо, например, вместо вертикальной полосы просмотра Scrollbar. В этом случае для того чтобы сдвинуть содержимое окна просмотра, вам не нужно снимать руку с мыши и переносить ее на клавиатуру или перемещать курсор мыши к полосе просмотра. Достаточно просто немного повернуть колесо в нужном направлении – и содержимое окна будет сдвинуто.
К сожалению, для использования возможности новой мыши вам не достаточно просто подключить ее к компьютеру и установить соответствующий драйвер. Программы MS-DOS и приложенияMicrosoft Windows версии 3.1 совсем не могут пользоваться колесом, принимая новую мышь как обычную двухкнопочную мышьMicrosoft. Что же касается приложенийMicrosoft Windows 95 иMicrosoft Windows NT, то в них необходимо предусмотреть обработку сообщений, создаваемых колесом.
Заметим, что все новые приложения, созданные Microsoft, такие какMicrosoft Office 97 иMicrosoft Visual C++ версии 5.0, умеют работать с мышьюMicrosoft IntelliMouse.
Для того чтобы воспользоваться колесом в старых приложениях, таких как Microsoft Word 7.0, вы можете применить условно-бесплатное приложение Flywheel, загрузив его изInternet с сервераWeb, расположенногопо адресу http://www.plannetarium.com. Это приложение преобразует сообщения от колеса в сообщения от вертикальной полосы просмотра и выполняет ряд других интересных функций.
Мы же в этой книге расскажем вам, как можно оорганизовать обработку сообщений от колеса мыши Microsoft IntelliMouse в своих приложениях.
Проверка наличия мыши Microsoft IntelliMouse
Ваше приложение должно уметь работать с любой мышью, даже если в нем предусмотрена обработка специфических сообщений от мыши Microsoft IntelliMouse. Поэтому не будет лишним в процессе инициализации приложения определить, подключена ли к компьютеру мышь Microsoft IntelliMouse или обычная мышь.
Способ проверки зависит от операционной системы.
