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));
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));