C ++,检测鼠标是否处于空闲状态(短时间,20ms)

时间:2018-08-27 15:50:03

标签: c++ mouse codeblocks

这是我的第一篇文章!

我正在编写一个C ++程序来控制《东方游戏》系列的主角;我正在为那些有手部残疾,无法单击箭头键,但仍可以使用鼠标的人设计。

玩家应通过鼠标移动来触发箭头键(鼠标左移并按下左键,依此类推。)。我已经做过那部分了,但是角色的移动就像多次按箭头键一样,因此角色的移动有点笨拙,粗糙,而不像键保持时那样平滑干净。

我的问题是我必须知道鼠标何时处于空闲状态/不移动(以了解玩家想要按住箭头键多长时间-玩家向某个方向滑动鼠标越多,箭头键就越多保持),但不知道如何操作。在Stackoverflow上搜索时,我已经找到了GetLastInput函数,但是它会触发每个输入,并且与鼠标无关。

它应该显示为:

while( *mousenotidling* ) { //holdbutton }

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

我正在使用C ++,Codeblock和GCC编译器编写它,我的操作系统是Windows 7 x86:)

1 个答案:

答案 0 :(得分:0)

您可以呼叫TrackMouseEvent并将空闲时间设置为2ms空闲时间所需的2000ms。您也可以使用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;}