我目前正在使用Raw输入实现鼠标输入。 但缺点是,不包括指针弹道。不幸的是,微软处理这个话题的网站不再在线了。此外,我找不到一个检索Windows中指针加速度设置的函数(也许我太傻了)。
如何获得加速度以及如何使用它来计算原始x和y偏移量之外的新直观光标位置?
修改
所以关于他的评论中发表的文件IInspectable,计算加速度的代码是:
long xPos = raw->data.mouse.lLastX;
long yPos = raw->data.mouse.lLastY;
int speed;
int acceleration[3];
SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
SystemParametersInfo(SPI_GETMOUSE, 0, acceleration, 0);
if (acceleration[2] > 0 && acceleration[0] < abs(raw->data.mouse.lLastX))
xPos *= 2;
else if (acceleration[2] > 1 && acceleration[1] < abs(raw->data.mouse.lLastX))
xPos *= 2;
if (acceleration[2] > 0 && acceleration[0] < abs(raw->data.mouse.lLastX))
yPos *= 2;
else if (acceleration[2] > 1 && acceleration[1] < abs(raw->data.mouse.lLastX))
yPos *= 2;
xPos *= round((float)speed / 10.0f);
yPos *= round((float)speed / 10.0f);
我是对的,这是如何为原始鼠标输入添加加速度的?
奇怪的是,当我使用SystemParametersInfo和SPI_GETMOUSE检索加速时,即使我在Windows中更改指针加速度,值也会保持在{6,10,1}。
答案 0 :(得分:0)
我有一个函数可以执行此缩放,对于任意delta(dq),它与您的类似。但是,我的经验是Windows加速和指针增强,特别是在考虑到DPI感知时,会使RAWINPUT与相应的WM_MOUSEMOVE之间的映射非常棘手......
int ApplyMouseAcceleration(int dq)
{
auto absdq{ abs(dq) };
// based on https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx
if (MouseAccelerationparams[0] && absdq > MouseAccelerationparams[0])
{
dq *= 2;
if ((absdq > MouseAccelerationparams[1]) && (MouseAccelerationparams[2] == 2))
{
dq *= 2;
}
}
dq = (dq*MouseSpeed) / 10;
return dq;
}