getRawInputBuffer 函数 (winuser.h)

对调用线程的消息队列中找到的原始输入消息数据执行缓冲读取。

语法

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

参数

[out, optional] pData

类型: PRAWINPUT

指向包含原始输入数据的 RAWINPUT 结构的缓冲区的指针。 缓冲区应在指针边界上对齐,该边界是 32 位体系结构上的 DWORD ,在 64 位体系结构上是 QWORD

如果 为 NULL,则第一个原始输入消息数据的大小 (所需的最小缓冲区) (以字节为单位)在 *) 中返回。

[in, out] pcbSize

类型: PUINT

所提供的 RAWINPUT 缓冲区的大小(以字节为单位)。

[in] cbSizeHeader

类型: UINT

RAWINPUTHEADER 结构的大小(以字节为单位)。

返回值

类型: UINT

如果 pDataNULL 且函数成功,则返回值为零。 如果 pData 不为 NULL 且函数成功,则返回值为写入 pDataRAWINPUT 结构数。

如果发生错误,则返回值 (UINT) -1。 调用 GetLastError 获取错误代码。

注解

当应用程序收到原始输入时,其消息队列将获取 WM_INPUT 消息,并设置队列状态标志 QS_RAWINPUT

使用 GetRawInputBuffer,在可变大小的 RAWINPUT 结构的数组中读取原始输入数据,并从调用线程的消息队列中删除相应的 WM_INPUT 消息。 可以使用缓冲区多次调用此方法,这些缓冲区在读取所有原始输入消息之前无法容纳所有消息的数据。

NEXTRAWINPUTBLOCK 宏允许应用程序遍历 RAWINPUT 结构的数组。

如果已成功从消息队列中读取所有原始输入消息,则会从调用线程的消息队列状态中清除 QS_RAWINPUT 标志。

注意

WOW64:若要获取原始输入缓冲区的正确大小,请不要使用 *httpsize,而应改用 *httpsize * 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)
Library User32.lib
DLL User32.dll

请参阅

概念性

GetMessage

NEXTRAWINPUTBLOCK

RAWINPUT

RAWINPUTHEADER

原始输入

引用

原始输入概述