Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебники 6012.doc
Скачиваний:
4
Добавлен:
01.05.2022
Размер:
126.46 Кб
Скачать

Функции Win32 api для клавиатуры и мыши

Большинство функций Win32 API, связанных с устройствами ручного ввода, осуществляют проверку поступающей информации, являясь, таким образом, информационными. К основным информационным функциям устройств ручного ввода можно отнести следующие ниже перечисленные функции.

Для клавиатуры:

  • GetKeyboardType;

  • GetKeyboardState;

  • GetKeyState;

  • GetAsyncKeyState.

GetKeyboardType возвращает информацию о текущей клавиатуре. С помощью данной функции можно запросить: тип, подтип клавиатуры и количество функциональных клавиш. На входе функции необходимо указать тип запрашиваемой информации:

0 -  тип клавиатуры;

1 -  подтип клавиатуры;

2 -  количество функциональных клавиш.

Подтип - это (ОЕМ) - зависимое значение. Если функция запрашивает тип клавиатуры, то на выходе возможны следующие варианты:

1 -  IBM® PC/XTд or compatible (83-key) keyboard

2 -  Olivetti® "ICO" (102-key) keyboard

3 -  IBM AT® (84-key) or similar keyboard

4 -  IBM enhanced (101- or 102-key) keyboard

5 -  Nokia® 1050 and similar keyboards

6 -  Nokia 9140 and similar keyboards

7 -  Japanese keyboard

При ошибке функция возвращает нуль.

Синтаксис: int GetKeyboardType(fnKeybInfo)

int fnKeybInfo; // тип запрашиваемой информации

GetKeyboardState позволяет получить массив значений, отражающих текущее состояние клавиатуры. Массив размером 256 байт соответствует состоянию каждой из 256 клавиш виртуальной таблицы. Если старший бит установлен, то клавиша нажата. Если младший бит виртуальных клавиш "NumLock", "CapsLock" или "ScrollLock" установлен, то данные клавиши задействованы, о чем свидетельствует соответствующая индикация. Код виртуальных клавиш '0' - '9' и 'A' - 'Z' соответствует их ASCII- коду. Для остальных клавиш определены константы: "VK_F1" - "VK_F24", "VK_NUMPAD0" - "VK_NUMPAD9", "VK_NUMLOCK", "VK_SCROLL", "VK_LBUTTON" - "VK_RBUTTON"(для мыши), "VK_SHIFT", "VK_CONTROL", "VK_MENU"(Alt) и т.д. Функция возвращает true при корректном ее завершении.

Синтаксис: BOOL GetKeyboardState(pbKeyState)

PBYTE pbKeyState; // указатель на массив, принимающий состояние клавиатуры

Действие GetKeyState сходно с действием GetKeyboardState, но только для одной клавиши. Если старший бит младшего байта установлен, то клавиша нажата. Если младший бит виртуальных клавиш "NumLock", "CapsLock" или "ScrollLock" установлен, то данные клавиши задействованы.

Синтаксис: SHORT GetKeyState(nVirtKey)

int nVirtKey; // код виртуальной клавиши

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

Синтаксис: SHORT GetAsyncKeyState(nVirtKey)

int nVirtKey; // код виртуальной клавиши

Для мыши основными являются следующие функции:

  • GetCursorPos;

  • GetKeyboardState (для кнопок мыши);

  • GetSystemMetrics;

  • SystemParametersInfo (для получения скорости перемещения курсора).

GetCursorPos позволяет определить координаты курсора мыши на экране в пикселях. Функция возвращает true при корректном ее завершении.

Синтаксис: BOOL GetCursorPos(lpPoint)

LPPOINT lpPoint; // указатель на структуру POINT 

GetSystemMetrics многоцелевая функция, позволяющая получить информацию о системной метрике. Системная метрика - высота и ширина различных элементов экрана Windows. Данная функция также позволяет получить версию Windows, количество кнопок мыши, реверсированы ли кнопки мыши и т.п.

Синтаксис: int GetSystemMetrics(nIndex)

int nIndex; // тип запрашиваемой информации

Запрашиваемая информация может иметь следующие основные значения.

SM_CLEANBOOT - как загружена система (0 - нормально, 1- защитный режим, 2 - защитный режим с сетью).

SM_CMOUSEBUTTONS - количество кнопок мыши.

SM_NETWORK - младший бит на выходе установлен, если сеть присутствует.

SM_CXBORDER  - ширина бордюра окна.

SM_CYBORDER  - высота бордюра окна.

SM_CYCAPTION - актуальная высота заголовка плюс SM_CYBORDER.

SM_CXCURSOR - ширина курсора.

SM_CYCURSOR  - высота курсора.

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

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

SM_CXFULLSCREEN - ширина рабочей области окна при полнооконном режиме.

SM_CYFULLSCREEN - высота рабочей области окна при полнооконном режиме (высота экрана минус высота заголовка).

SM_CXHSCROLL - ширина стрелки на горизонтальной линейке прокрутки.

SM_CYHSCROLL - высота стрелки на горизонтальной линейке прокрутки.

SM_CXICON - ширина иконки.

SM_CYICON - высота иконки.

SM_CYMENU - высота одной линии меню минус SM_CYBORDER.

SM_CXMIN - минимальная ширина окна.

SM_CYMIN - минимальная высота окна.

SM_CXSCREEN - ширина экрана.

SM_CYSCREEN - высота экрана.

SM_CXSIZE - ширина изображения, содержащегося в линии заголовка.

SM_CYSIZE - высота изображения, содержащегося в линии заголовка.

SM_CXVSCROLL - ширина стрелки на вертикальной линейке прокрутки.

SM_CYVSCROLL - высота стрелки на вертикальной линейке прокрутки.

SM_CXHTHUMB - ширина прямоугольника на горизонтальной линейке прокрутки.

SM_CYVTHUMB - высота прямоугольника на вертикальной линейке прокрутки.

SM_MOUSEPRESENT - статус мыши (если установлена, то не нуль).

SM_SWAPBUTTON - реверс кнопок мыши (если нуль, то кнопка в нормальном состоянии).

SystemParametersInfo запрашивает или устанавливает системные параметры.

Синтаксис: BOOL SystemParametersInfo(wAction, wParam, lpvParam, fUpdateProfile)

UINT wAction; // тип действия

UINT wParam; // дополнительный параметр беззнаковое целое

PVOID lpvParam; // дополнительный параметр указатель на неопределенный тип

UINT fUpdateProfile; // флаг обновления системы

Тип запрашиваемых или устанавливаемых параметров может принимать одно из следующих основных значений:

SPI_GETBEEP - запрашивает значение типа BOOL предупредительного звукового сигнала.

wParam=0; lpvParam=указатель на BOOL; 

SPI_SETBEEP - устанавливает значение типа BOOL предупредительного звукового сигнала.

wParam=BOOL; lpvParam=NULL; 

SPI_GETBORDER - запрашивает значение, определяющее ширину бордюра окна.

wParam=0; lpvParam=указатель на int; 

SPI_SETBORDER - устанавливает значение, определяющее ширину бордюра окна.

wParam=int; lpvParam=NULL; 

SPI_GETFASTTASKSWITCH - запрашивает положение переключателя быстрой задачи вкл./выкл.

wParam=0; lpvParam=указатель на BOOL; 

SPI_SETFASTTASKSWITCH - устанавливает положение переключателя быстрой задачи вкл./выкл.

wParam=BOOL; lpvParam=NULL; 

SPI_GETGRIDGRANULARITY - запрашивает текущее значение размера ячейки сетки рабочего стола.

wParam=0; lpvParam=указатель на int; 

SPI_SETGRIDGRANULARITY - устанавливает текущее значение размера ячейки сетки рабочего стола.

wParam=int; lpvParam=NULL; 

SPI_GETKEYBOARDDELAY - запрашивает задержку повторения клавиатуры.

wParam=0; lpvParam=указатель на int; 

SPI_SETKEYBOARDDELAY - устанавливает задержку повторения клавиатуры.

wParam=int; lpvParam=NULL; 

SPI_GETKEYBOARDSPEED - запрашивает скорость повторения клавиатуры.

wParam=0; lpvParam=указатель на WORD; 

SPI_SETKEYBOARDSPEED - устанавливает скорость повторения клавиатуры.

wParam=WORD; lpvParam=NULL; 

SPI_GETMOUSE - запрашивает скорость перемещения мыши.

wParam=0; lpvParam=указатель на массив int, где lpiMouse[0] - порог1, lpiMouse[1] - порог2, lpiMouse[2] - скорость ; 

SPI_SETMOUSE - устанавливает скорость перемещения мыши.

wParam=0; lpvParam=указатель на массив int, где lpiMouse[0] - порог1, lpiMouse[1] - порог2, lpiMouse[2] - скорость ; 

SPI_GETSCREENSAVEACTIVE - запрашивает значение типа BOOL о включенном или выключенном хранителе экрана. wParam=0; lpvParam=указатель на BOOL; 

SPI_SETSCREENSAVEACTIVE - устанавливает значение типа BOOL включенного или выключенного хранителя экрана. wParam=BOOL; lpvParam=NULL; 

SPI_GETSCREENSAVETIMEOUT - запрашивает время в секундах, через которое срабатывает хранитель экрана. wParam=0; lpvParam=указатель на int; 

SPI_SETSCREENSAVETIMEOUT  - устанавливает время в секундах, через которое срабатывает хранитель wParam=int; lpvParam=NULL; 

SPI_LANGDRIVER - идентификатор языкового драйвера.

wParam=0; lpvParam=указатель на строку char ограниченной нулевым элементом; 

SPI_SETDESKWALLPAPER - устанавливает имя файла обоев рабочего стола.

wParam=0; lpvParam=указатель на строку char ограниченной нулевым элементом; 

SPI_SETDOUBLECLICKTIME - устанавливает время двойного нажатия клавиши мыши в миллисекундах.

wParam=int; lpvParam=NULL; 

SPI_SETDOUBLECLKHEIGHT - установка высоты прямоугольника, в котором срабатывает двойное нажатие. wParam=int; lpvParam=NULL; 

SPI_SETDOUBLECLKWIDTH - установка ширины прямоугольника, в котором срабатывает двойное нажатие.

wParam=int; lpvParam=NULL; 

SPI_SETMOUSEBUTTONSWAP - установка реверса кнопок мыши.

wParam=BOOL; lpvParam=NULL; 

Получаемая информация предназначена как для реагирования программы на действия оператора, так и для получения типа установленных устройств. Приведенные функции позволяют оператору ПЭВМ получить следующую информацию:

  • тип клавиатуры и количество функциональных клавиш клавиатуры;

  • текущее состояние всех клавиш (клавиатуры и мыши);

  • текущее состояние заданной клавиши;

  • текущее и предыдущее состояние заданной клавиши;

  • положение курсора;

  • присутствие мыши в системе и количестве кнопок мыши;

  • скорость перемещения курсора и т.д.

Важнейшей информацией для интерфейса пользователя большинства приложений является состояние клавиш и положение курсора мыши на экране. По данной информации принимается решение о связи между оператором и выполняемой программой на ПЭВМ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]