如何在我的应用程序(windows mobile,c#)中检测用户不活动

如何在我的应用程序(windows mobile,c#)中检测用户不活动,c#,windows-mobile,C#,Windows Mobile,我们需要记录用户在一组表单中可能花费的时间。主要的挑战是检测用户是否与应用程序交互。到目前为止,我发现这个链接()提供了一个理想的解决方案,但我们公司对开源/第三方库非常保守。(我知道在表单级别安装消息过滤器是另一种选择,但它可能会使现有应用程序变得不必要的复杂。理想情况下,我希望在应用程序级别安装消息过滤器。) 提前感谢您提供的任何想法或解决方案。仅使用CF的内置功能并不是一种简单的方法。您需要查看应用程序的所有消息,而该博客条目中概述的IMessageFilter实现(通过SDF启用,因为C

我们需要记录用户在一组表单中可能花费的时间。主要的挑战是检测用户是否与应用程序交互。到目前为止,我发现这个链接()提供了一个理想的解决方案,但我们公司对开源/第三方库非常保守。(我知道在表单级别安装消息过滤器是另一种选择,但它可能会使现有应用程序变得不必要的复杂。理想情况下,我希望在应用程序级别安装消息过滤器。)


提前感谢您提供的任何想法或解决方案。

仅使用CF的内置功能并不是一种简单的方法。您需要查看应用程序的所有消息,而该博客条目中概述的IMessageFilter实现(通过SDF启用,因为CF不支持它们)是最简单的方法


通过创建您自己的消息泵(通过调用GetMessage、TranslateMessage和DispatchMessage),然后不使用Application.Run,而使用您自己的调用,您可以始终执行SDF正在执行的相同操作。这就是SDF所做的一切。

当用户与系统交互时,Windows Mobile会设置一个命名事件。事件的名称存储在:
HKLM\System\GWE\ActivityEvent
中。您可以设置一个线程,等待此命名事件发出信号,并确定触发事件时窗体是否处于活动状态。您可以使用来确定设置事件时窗口是否具有焦点


另一种可能是使用and对表单进行子类化。这将导致表单接收到的所有消息都传递给新的WndProc函数。您可以在WndProc函数中检查活动消息(WM_LBUTTONDOWN、WM_LBUTTONUP、WM_COMMAND等),然后使用CallWndProc函数将消息传递回原始WndProc。

问题在于,这两种消息都不是很容易维护的。如果你在应用程序中添加了一个新表单,那么你必须对它进行子类化,或者将它添加到搜索逻辑中,以了解是否是你的表单获取了事件。命名事件听起来是一个不错的方法。我从这个链接开始(开发者的力量第2部分)。子类本身并不复杂,但将其应用于选定的一组表单,并且仍然对其他开发人员隐藏它可能会使解决方案比需要的更复杂。