Поделиться через


Функция GetRawInputBuffer (winuser.h)

Выполняет буферизованное чтение необработанных входных данных сообщений, найденных в очереди сообщений вызывающего потока.

Синтаксис

UINT GetRawInputBuffer(
  [out, optional] PRAWINPUT pData,
  [in, out]       PUINT     pcbSize,
  [in]            UINT      cbSizeHeader
);

Параметры

[out, optional] pData

Тип: PRAWINPUT

Указатель на буфер структур RAWINPUT , содержащих необработанные входные данные. Буфер должен быть выровнен по границе указателя, которая является DWORD для 32-разрядных архитектур и QWORD для 64-разрядных архитектур.

Если значение РАВНО NULL, размер первых необработанных входных данных сообщения (минимальный необходимый буфер) в байтах возвращается в *pcbSize.

[in, out] pcbSize

Тип: PUINT

Размер предоставленного буфера RAWINPUT в байтах.

[in] cbSizeHeader

Тип: UINT

Размер структуры RAWINPUTHEADER в байтах.

Возвращаемое значение

Тип: UINT

Если pData имеет значение NULL и функция выполнена успешно, возвращаемое значение равно нулю. Если значение pData не равно NULL и функция выполнена успешно, возвращаемое значение — это количество структур RAWINPUT , записанных в pData.

При возникновении ошибки возвращается значение (UINT)-1. Вызовите GetLastError для кода ошибки.

Комментарии

Когда приложение получает необработанные входные данные, его очередь сообщений получает WM_INPUT сообщение и флаг состояния очереди QS_RAWINPUT установлен.

С помощью GetRawInputBuffer необработанные входные данные считываются в массиве структур RAWINPUT переменного размера, а соответствующие сообщения WM_INPUT удаляются из очереди сообщений вызывающего потока. Этот метод можно вызвать несколько раз с буфером, который не может поместить все данные сообщения, пока не будут прочитаны все необработанные входные сообщения.

Макрос NEXTRAWINPUTBLOCK позволяет приложению просматривать массив структур RAWINPUT.

Если все необработанные входные сообщения успешно считываются из очереди сообщений , QS_RAWINPUT флаг удаляется из состояния очереди сообщений вызывающего потока.

Примечание

WOW64: чтобы получить правильный размер необработанного входного буфера, не используйте *pcbSize, вместо него используйте *pcbSize * 8. Чтобы обеспечить правильное поведение GetRawInputBuffer в WOW64, необходимо выровнять структуру RAWINPUT по 8 байтам. В следующем коде показано, как выровнять RAWINPUT для WOW64.

[StructLayout(LayoutKind.Explicit)]
internal struct RAWINPUT
{
    [FieldOffset(0)]
    public RAWINPUTHEADER header;

    [FieldOffset(16+8)]
    public RAWMOUSE mouse;

    [FieldOffset(16+8)]
    public RAWKEYBOARD keyboard;

    [FieldOffset(16+8)]
    public RAWHID hid;
}

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll

См. также раздел

Основные понятия

GetMessage

NEXTRAWINPUTBLOCK

RAWINPUT

RAWINPUTHEADER

Необработанные входные данные

Справочные материалы

Общие сведения о необработанных входных данных