Функция 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 |
См. также раздел
Основные понятия
Справочные материалы