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


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

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

Синтаксис

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

Параметры

[out, optional] pData

Тип: PRAWINPUT

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

Если значение 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 [только классические приложения]
целевая платформа Виндоус
Заголовок winuser.h (включая Windows.h)
Библиотека User32.lib
Библиотека dll User32.dll

См. также

Концептуальный

GetMessage

NEXTRAWINPUTBLOCK

RAWINPUT

RAWINPUTHEADER

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

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

Обзор необработанных входных данных