2016-04-26 53 views
1

我正在使用原始输入实现鼠标输入。 但缺点是,指针弹道不包括在内。不幸的是,微软处理这个话题的网站不再上网了。此外,我无法找到一个函数检索窗口中设置的指针加速度(也许我太愚蠢)。原始输入和光标加速

我该如何获得加速度,以及如何使用它来计算原始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检索加速度时,值仍然保持在{6,10,1}。

+0

您查询通过使用'SPI_GETMOUSE'参数调用[SystemParametersInfo](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724947.aspx)来实现鼠标加速。有关鼠标加速的信息,请参见[mouse_event](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260.aspx)文档的*备注*部分。 – IInspectable

回答

0

我有一个函数可以进行这种缩放,对于任意增量(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; 
} 
+0

其实; Windows中的“增强指针移动”设置是罪魁祸首;它似乎引入了另一组修饰符,它们是*不是*您从SPI_GETMOUSE获得的加速曲线等。我无法找到这个记录的位置,所以也许它不是...... :( – SonarJetLens