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

C++ C++;,检测鼠标是否空闲(短时间,20ms),c++,mouse,codeblocks,C++,Mouse,Codeblocks,这是我的第一篇帖子 我写了一个C++程序来控制头侯游戏系列中的主角;我为那些手有残疾,不能点击箭头键,但仍然可以使用鼠标的人制作 玩家应该通过鼠标移动触发箭头键(鼠标向左移动,按下左键,等等)。我已经做了这一部分,但是角色的移动就像多次按下箭头键一样,因此角色的移动有点笨拙和粗糙,不像按住键那样平滑和干净 我的问题是,我必须知道鼠标什么时候空转/不移动(以了解玩家想要按住箭头键的时间——玩家朝一个方向滑动鼠标越多,箭头键被按住的时间就越多),但我不知道怎么做。在Stackoverflow上搜索时

这是我的第一篇帖子

我写了一个C++程序来控制头侯游戏系列中的主角;我为那些手有残疾,不能点击箭头键,但仍然可以使用鼠标的人制作

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

我的问题是,我必须知道鼠标什么时候空转/不移动(以了解玩家想要按住箭头键的时间——玩家朝一个方向滑动鼠标越多,箭头键被按住的时间就越多),但我不知道怎么做。在Stackoverflow上搜索时,我找到了GetLastInput函数,但它会为每个输入触发,并且不仅仅与鼠标相关

结果应该是这样的:

while(*mousenotidling*)
{
//保持按钮
}

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


我用C++编写,用CODEBROCK和GCC编译器,我的操作系统是Windows 7 x86:)/P> < P>你可以调用<代码> TrravousEngult< /C> >,并将空闲时间设置为2000秒的空闲时间。您还可以使用
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;}

如何
intprev\ux=0,prev\uy=0;当(1){int x=…,y=…;if(x==prev_x&&y==prev_y){鼠标移动了}其他{鼠标没有移动}prev_x=x;prev_y=y;}
哇,好主意!!我不能使它完全像那样,在我的例子中,它更像是:if(坐标在20ms内保持不变){//stopmoving}。我需要一个计时器来实现它,但这没有问题。非常感谢,这应该有用!!我很快就会更新。@HolyBlackCat
如果(x==prev_x&&y==prev_y){鼠标被移动了}否则{鼠标没有移动}
要么我不明白你的意思,要么你交换了then-and-else分支。然而,亚历山德罗似乎明白了这一点。@Scheff的确,我不小心交换了它们。@HolyBlackCat…哈桑非常友好地将您的代码草图复制到了他的答案中…;-)非常感谢您的回答!我已经尝试过GetIdleTime,但是(如果我没有错的话),它只返回键盘和鼠标,而不是standalones。我使用了你引用的BlackCat建议,效果很好。再次感谢你!