Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Существует множество устройств ввода пользователей рядом с традиционной клавиатурой и мышью. Например, входные данные пользователя могут поступать из джойстика, сенсорного экрана, микрофона или других устройств, которые обеспечивают большую гибкость ввода пользователем. Эти устройства называются устройствами с человеческим интерфейсом (HID). API необработанных входных данных обеспечивает стабильный и надежный способ для приложений принимать необработанные входные данные из любого HID, включая клавиатуру и мышь.
В этом разделе рассматриваются следующие разделы:
- Модель необработанного ввода
- Регистрация необработанных данных ввода
- чтение необработанных входных данных
Необработанные входные модели
Ранее клавиатура и мышь обычно создают входные данные. Система интерпретировала данные, поступающие с этих устройств, таким образом, чтобы устранить характерные для каждого устройства детали из исходной информации. Например, клавиатура создает код сканирования для конкретного устройства, но система предоставляет приложение с кодом виртуального ключа. Помимо скрытия сведений о необработанных входных данных, диспетчер окон не поддерживал все новые HID. Чтобы получить входные данные из неподдерживаемых HID, приложению пришлось выполнить много действий: открыть устройство, управлять общим режимом, периодически читать устройство или настраивать порт завершения ввода-вывода и т. д. Необработанная модель ввода и связанные API были разработаны, чтобы обеспечить простой доступ к необработанным входным данным со всех устройств ввода, включая клавиатуру и мышь.
Необработанные входные модели отличаются от исходной модели ввода Windows для клавиатуры и мыши. В исходной модели ввода приложение получает независимые от устройства входные данные в виде сообщений, отправляемых или размещенных в его окнах, таких как WM_CHAR, WM_MOUSEMOVEи WM_APPCOMMAND. В отличие от этого, для необработанных входных данных приложение должно зарегистрировать устройства, из которые он хочет получить данные. Кроме того, приложение получает необработанные входные данные через сообщение WM_INPUT.
Существует несколько преимуществ для необработанной входной модели:
- Приложению не нужно обнаруживать или открывать устройство ввода.
- Приложение получает данные непосредственно с устройства и обрабатывает данные для своих потребностей.
- Приложение может различать источник входных данных, даже если он отличается от того же типа устройства. Два мышиных устройства.
- Приложение управляет трафиком данных путем указания данных из коллекции устройств или только определенных типов устройств.
- Устройства HID можно использовать по мере их появления на рынке, не ожидая новых типов сообщений или обновленной версии ОС для получения новых команд в WM_APPCOMMAND.
Обратите внимание, что WM_APPCOMMAND предоставляет некоторые устройства HID. Однако WM_APPCOMMAND — это событие ввода, независимое от устройства, а WM_INPUT отправляет необработанные данные низкого уровня, относящиеся к устройству.
Регистрация для необработанных входных данных
По умолчанию приложение не получает необработанных входных данных. Чтобы получить необработанные входные данные с устройства, приложение должно зарегистрировать устройство.
Чтобы зарегистрировать устройства, приложение сначала создает массив структур RAWINPUTDEVICE, указывающих коллекцию верхнего уровня (TLC) для требуемых устройств. TLC определяется страницей использования (классом устройства) и идентификатором использования (устройство внутри класса). Например, чтобы получить TLC клавиатуры, задайте UsagePage = 0x01 и UsageID = 0x06. Приложение вызывает RegisterRawInputDevices для регистрации устройств.
Обратите внимание, что приложение может зарегистрировать устройство, которое в настоящее время не подключено к системе. При подключении этого устройства диспетчер Windows автоматически отправляет необработанные входные данные приложению. Чтобы получить список необработанных входных устройств в системе, приложение вызывает GetRawInputDeviceList. Используя hDevice из этого вызова, приложение вызывает GetRawInputDeviceInfo для получения сведений об устройстве.
Через параметр dwFlags структуры RAWINPUTDEVICE, приложение может выбрать устройства для прослушивания, а также те устройства, которые необходимо игнорировать. Например, приложение может запрашивать информацию со всех устройств телефонии, за исключением автоответчиков. Пример кода см. в разделе Регистрация необработанных данных ввода.
Обратите внимание, что мышь и клавиатура также являются HID, поэтому данные из них могут поступать как через сообщение HID WM_INPUT, так и из традиционных сообщений. Приложение может выбрать любой метод с помощью правильного выбора флагов в RAWINPUTDEVICE.
Чтобы получить состояние регистрации приложения, вызовите GetRegisteredRawInputDevices в любое время.
Чтение необработанных входных данных
Приложение получает необработанные данные от любого HID, коллекция верхнего уровня (TLC) которого совпадает с TLC из регистрации. Когда приложение получает необработанные входные данные, его очередь сообщений получает сообщение WM_INPUT, и устанавливается флаг состояния очереди QS_RAWINPUT (QS_INPUT также включает этот флаг). Приложение может получать данные, когда он находится на переднем плане и когда он находится в фоновом режиме.
Существует два способа чтения необработанных данных: небуферированный (или стандартный) метод и буферизованный метод. Не буферизованный метод получает необработанные данные, структуру RAWINPUT за раз и подходит для многих HID-устройств. Здесь приложение вызывает GetMessage, чтобы получить сообщение WM_INPUT. Затем приложение вызывает GetRawInputData, используя дескриптор RAWINPUT, содержащийся в WM_INPUT. Пример см. в разделе "Чтение сырых данных".
Напротив, буферный метод получает массив структур RAWINPUT за раз. Это предусмотрено для устройств, которые могут производить большие объемы необработанных входных данных. В этом методе приложение вызывает GetRawInputBuffer, чтобы получить массив структур RAWINPUT. Обратите внимание, что макрос NEXTRAWINPUTBLOCK используется для обхода массива структур RAWINPUT. Пример см. в разделе "Выполнение буферизованного чтения необработанных данных".
Для интерпретации необработанных входных данных требуется подробная информация о HID. Приложение получает информацию об устройстве, вызывая GetRawInputDeviceInfo с дескриптором устройства. Этот дескриптор может поступать из WM_INPUT или из hDevice члена RAWINPUTHEADER.