代码之家  ›  专栏  ›  技术社区  ›  Codism

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

  •  2
  • Codism  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 11 年前
        1
  •  0
  •   Trevor Balcom    14 年前

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

    另一种可能是使用 GetWindowLong SetWindowLong .这将导致表单接收到的所有消息都传递给新的wndproc函数。您可以在wndproc函数中检查活动消息(wm_lbuttondown、wm_lbuttonup、wm_命令等),然后使用callwndproc函数将消息传递回原始wndproc。

        2
  •  2
  •   ctacke    14 年前

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

    通过创建自己的消息泵(通过p/调用getmessage、translatemessage和dispatchmessage),然后不使用application.run,而是使用自己的调用,您可以始终执行与sdf相同的操作。这就是SDF所做的一切。