怎的捕获“鼠标键盘1分钟无输入”的事件
怎样捕获“鼠标键盘1分钟无输入”的事件?
我的程序想实现这样的功能:当用户的鼠标和键盘超过一分钟没有动作时,我的程序自动执行某项操作。这个该怎么实现?谢谢!
我能想到的方法是,通过全局HOOK监视鼠标和键盘事件,每次有动作则重置一次Timer,Timer回调函数中判断如果时间累积到1分钟则触发我的操作。但总觉得这样的方法会很消耗资源,不高效,有没有更好的思路呢?
------解决思路----------------------
定时去调用GetLastInputInfo
------解决思路----------------------
重载OnIdle函数,当程序没有消息处理的时候,MFC程序会运行该函数,可以对其进行重载,处理一些简单的后台任务
可以不需要使用定时,如果确实需要定时,可以在该函数中调用GetTickCount函数测量时间,定义一个全局初始时间t0,在OnMsg函数中复位t0
------解决思路----------------------
1秒的timer事件,对全局变量进行自增,在重写消息获取虚函数,当有消息来时,全局变量清0,当超过60就触发别的动作,全局变量用volatail就OK了
------解决思路----------------------
首先你对“高效”的考虑是多余的,系统处理速度远高于你的想象,大部分时间CPU都处于空闲状态。使用定时器是正确的方法,至于在何处加入计时可细细思量一下。
------解决思路----------------------
只对当前进程有效,如果要全局的你只能挂个鼠标、键盘钩子,一个全局变量,一个计时器
计时器中判断全局变量是否达到上限,是的话就执行你想要的操作
钩子函数中每次接收到鼠标或键盘的消息时,全局变量清零
鼠标消息:WM_MOUSEFIRST ~ WM_MOUSELAST
键盘消息:WM_KEYFIRST ~ WM_KEYLAST
我的程序想实现这样的功能:当用户的鼠标和键盘超过一分钟没有动作时,我的程序自动执行某项操作。这个该怎么实现?谢谢!
我能想到的方法是,通过全局HOOK监视鼠标和键盘事件,每次有动作则重置一次Timer,Timer回调函数中判断如果时间累积到1分钟则触发我的操作。但总觉得这样的方法会很消耗资源,不高效,有没有更好的思路呢?
------解决思路----------------------
定时去调用GetLastInputInfo
------解决思路----------------------
重载OnIdle函数,当程序没有消息处理的时候,MFC程序会运行该函数,可以对其进行重载,处理一些简单的后台任务
可以不需要使用定时,如果确实需要定时,可以在该函数中调用GetTickCount函数测量时间,定义一个全局初始时间t0,在OnMsg函数中复位t0
------解决思路----------------------
1秒的timer事件,对全局变量进行自增,在重写消息获取虚函数,当有消息来时,全局变量清0,当超过60就触发别的动作,全局变量用volatail就OK了
------解决思路----------------------
首先你对“高效”的考虑是多余的,系统处理速度远高于你的想象,大部分时间CPU都处于空闲状态。使用定时器是正确的方法,至于在何处加入计时可细细思量一下。
------解决思路----------------------
只对当前进程有效,如果要全局的你只能挂个鼠标、键盘钩子,一个全局变量,一个计时器
计时器中判断全局变量是否达到上限,是的话就执行你想要的操作
钩子函数中每次接收到鼠标或键盘的消息时,全局变量清零
鼠标消息:WM_MOUSEFIRST ~ WM_MOUSELAST
键盘消息:WM_KEYFIRST ~ WM_KEYLAST