GetRawInputData 不适用于 x64 构建

GetRawInputData not working for x64 build

GetRawInputData 适用于 x86 构建,但不适用于 x64。

UINT32 dwSize = 40;
static BYTE lpb[40];
GetRawInputData((HRAWINPUT)lparam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));

我用它来获取鼠标输入。在 x86 构建中我得到了正确的值,但在 x64 上它 returns lLastX 和 lLastY 为 0。

RAWINPUT* raw = (RAWINPUT*)lpb;

if (raw->header.dwType == RIM_TYPEMOUSE)
{
  int xPosRelative = raw->data.mouse.lLastX;
  int yPosRelative = raw->data.mouse.lLastY;
  ...

我几乎都在使用 Microsoft 网站上的代码,所以我不确定从哪里开始。 Google 没有帮助。谢谢!

dwSize 应设置为缓冲区的大小。缓冲区在两个目标上似乎具有不同的大小(例如,由于整数大小不同,这是意料之中的)。

在下面的示例中,我任意选择了 65,000,但您需要为您的应用计算出正确的值。

dwSize = 65000;
BYTE * lpb = new BYTE[dwSize];
GetRawInputData((HRAWINPUT)lparam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));