C++,检测鼠标是否空闲(短时间,20 毫秒)

C++, detecting if mouse is idle-ing (short-time, 20ms)

这是我的第一个 post!

我正在编写一个 C++ 程序来控制东方游戏系列中的主角;我正在为那些有手部残疾并且不能点击箭头键但仍然可以使用鼠标的人制作它。

玩家应通过鼠标移动触发箭头键(鼠标向左移动并按下左键,等等)。那个部分我已经做了,但是角色移动就像多次按下箭头键一样,所以角色移动有点笨拙和粗糙,不像按住键那样流畅和干净。

我的问题是我必须知道鼠标何时 idling/not 移动(以了解玩家想要按住箭头键多长时间——玩家在一个方向上滑动鼠标的次数越多,那个箭头键是按住的),但不知道怎么做。在 Whosebug 上搜索我找到了 GetLastInput 函数,但它会触发每个输入,并且与鼠标无关。

结果应该是这样的:

while( *mousenotidling* ) { //holdbutton }

你有什么建议?我如何知道鼠标何时空闲(短时间,如 20 毫秒)? (或者如果您提出其他解决方案,欢迎大家提出意见)

我用 C++ 编写,使用 Codeblock 和 GCC 编译器,我的 OS 是 Windows 7 x86 :)

您可以调用 TrackMouseEvent 并将空闲时间设置为所需的时间,例如 2000 毫秒空闲时间为 2 秒。您还可以使用 GetLastInputInfo 来获取最后一次执行键或鼠标移动的毫秒数。

DWORD GetIdleTime() 
{ 
    LASTINPUTINFO pInput;   
    pInput.cbSize = sizeof(LASTINPUTINFO); 

    if (!GetLastInputInfo(&pInput))
    { 
        // any errors will be reported
    } 

    // return idle time in milliseconds
    return pInput.dwTime; 
} 

你也可以试试这个建议

int prev_x = 0, prev_y = 0; while (1) 
{int x = ..., y = ...; if (x == prev_x && y == prev_y) {mouse was moved} 
else {mouse wasn't moved} prev_x = x; prev_y = y;}