对调用线程的消息队列中找到的原始输入消息数据执行缓冲读取。
语法
UINT GetRawInputBuffer(
[out, optional] PRAWINPUT pData,
[in, out] PUINT pcbSize,
[in] UINT cbSizeHeader
);
参数
[out, optional] pData
类型: PRAWINPUT
指向包含原始输入数据的 RAWINPUT 结构的缓冲区的指针。 指针应在 DWORD (32 位)边界上对齐。
如果 为 NULL,则以字节为单位返回第一个原始输入消息数据(所需的最小缓冲区)的大小(以字节为单位)。
[in, out] pcbSize
类型: PUINT
提供的 RAWINPUT 缓冲区的大小(以字节为单位)。
[in] cbSizeHeader
类型:UINT
RAWINPUTHEADER 结构的大小(以字节为单位)。
返回值
类型:UINT
如果 pData 为 NULL 且函数成功,则返回值为零。 如果 pData 不为 NULL 且函数成功,则返回值为写入 pData 的 RAWINPUT 结构数。
如果发生错误,则返回值为 (UINT)-1。 为错误代码调用 GetLastError 。
注解
当应用程序收到原始输入时,其消息队列将获取 WM_INPUT 消息,并设置队列状态标志 QS_RAWINPUT 。
使用 GetRawInputBuffer,原始输入数据在可变大小的 RAWINPUT 结构数组中读取,并从调用线程的消息队列中删除相应的 WM_INPUT 消息。 可以使用缓冲区多次调用此方法,该缓冲区在读取所有原始输入消息之前无法容纳所有消息的数据。
NEXTRAWINPUTBLOCK 宏允许应用程序遍历 RAWINPUT 结构的数组。
如果所有原始输入消息已成功从消息队列中读取,则从调用线程的消息队列状态中清除 QS_RAWINPUT 标志。
注释
WOW64:若要获取原始输入缓冲区的正确大小,请不要使用 *分配到 *azureSize,请改用 *mbSize * 8。 为了确保 GetRawInputBuffer 在 WOW64 上的行为正确,必须将 RAWINPUT 结构对齐 8 个字节。 以下代码演示如何对齐 WOW64 的 RAWINPUT 。
[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操作系统 |
标头 | winuser.h (包括 Windows.h) |
图书馆 | User32.lib |
DLL | User32.dll |
另请参阅
概念
引用