Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检测没有挂钩的键盘事件以确定用户空闲时间_C++_Windows_Winapi_Visual C++_Keyboard - Fatal编程技术网

C++ 检测没有挂钩的键盘事件以确定用户空闲时间

C++ 检测没有挂钩的键盘事件以确定用户空闲时间,c++,windows,winapi,visual-c++,keyboard,C++,Windows,Winapi,Visual C++,Keyboard,我需要确定用户是否以这种特定方式空闲。 由于复杂的原因,我不能使用诸如GetCursorPos或任何与鼠标相关的功能。此外,我不能在主函数中运行所有挂钩和GetMessage/TranslateMessage/DispachMessage循环的情况下使用LowLevelKeyboardProc。这两个选项不是我的选择,不是我的决定 GetLastInputInfo看起来很完美,但它不能只过滤键盘事件,默认情况下它同时检测鼠标和键盘事件 是否有一个simliar函数可以只用于检测键盘事件? 我不需

我需要确定用户是否以这种特定方式空闲。 由于复杂的原因,我不能使用诸如GetCursorPos或任何与鼠标相关的功能。此外,我不能在主函数中运行所有挂钩和GetMessage/TranslateMessage/DispachMessage循环的情况下使用LowLevelKeyboardProc。这两个选项不是我的选择,不是我的决定

GetLastInputInfo看起来很完美,但它不能只过滤键盘事件,默认情况下它同时检测鼠标和键盘事件

是否有一个simliar函数可以只用于检测键盘事件? 我不需要也不想知道按下了哪些键,我只需要知道用户是否按下了任何键。然后我将每半秒循环检查一次,直到返回false,然后完成。 更好的方法是在上次发生键盘事件时得到回报。像GetLastInputInfo一样:

这很难解释,而且这些都不是借口,我必须避免使用钩子,而只是检测是否发生了键盘事件


感谢您的帮助。

为什么鼠标移动不算作用户活动?当然,任何用户输入都是活动,无论是键盘还是鼠标?只有两种方法可以监视系统范围内的用户输入:API和。因为不能使用钩子,所以实际上只剩下一个选项了。除非你能对你的PM说些道理,然后选择自然的解决方案:加上定时器。为什么主动移动鼠标会计入用户的空闲时间?是的,不移动的鼠标通常被视为不活动,但是与主应用程序绑定的另一个应用程序会不时生成鼠标事件,因此我无法通过鼠标跟踪可靠地检测用户的不活动,因为鼠标移动将以编程方式发生。键盘事件仍然取决于人类用户,这就是为什么它是确定空闲时间的唯一解决方案。另外,我的应用程序可以有两个不同的windows消息循环吗?我的意思是2个线程和2个循环,我可以使用另一个消息循环来检测按键,任何键都可以。。感谢您的帮助为什么不在主消息循环中添加一点代码来记录当前按键时间,并将其存储在稍后可以检查的地方呢。例如,可以使用原子增量,并定期将上次看到的值与当前值进行比较。@Mats:当您处于模式消息循环中时,例如在显示模式对话框或导航菜单时,该代码将不会运行。