Compact Framework - 超时功能,用于在不活动时段后锁定UI

问题描述 投票:2回答:3

早上好,

我是一个中型PDA应用程序的开发人员,将在街头使用。 PDA将包含一些模糊的敏感数据(名称和地址等)。已经处理了移动数据库上的加密,但是如果有人在登录时拿到了PDA,他们可以愉快地查看数据,直到电池耗尽或他们关闭应用程序并且必须再次登录。

当用户访问PDA应用程序时,他们需要输入用户名和PIN码。该软件的版本1有一个事件挂钩到系统中的每个按钮,以便在按下按钮时,它更新了一个名为LastActionTime的变量。在主窗体上运行一个计时器,如果LastActionTime超过10分钟,那么系统将再次抛出登录表单,直到先前的用户/管理员再次登录(就像Windows锁定屏幕一样)。

从某种意义上来说,这很好用......问题在于它只处理按钮并且没有处理其他控件,如ListViews,PictureBoxes等。

有没有什么好办法实现这个目标?例如,有没有办法可以扩展Windows窗体类来处理每个事件并相应地更新该变量?或者我可以做一些Windows-esque来处理表单上的每一个鼠标事件?

为了完全简洁,我想要实现的是,当PDA屏幕/按钮没有被触摸10分钟时,PDA会知道这一点并允许我解锁我的锁定方法。

任何想法,帮助和指导将不胜感激。

编辑:我在Windows Mobile 6.0上使用Compact Framework 2.0,但该功能需要在Windows Mobile 5.0及更高版本上运行。

events timeout compact-framework c#-2.0 handhelddevice
3个回答
3
投票

一种可能的解决方案是依靠PDA进入电源空闲状态。您可以使用OpenNETCF.WindowsCE.PowerManager.PowerIdle事件为此注册通知。实际上,考虑电源管理考虑因素是个好主意。您不能指望您的PDA始终处于相同的状态。

另一种解决方案是监视输入驱动程序的非活动事件(请参阅此link)。但是,此解决方案非常特定于设备。

遗憾的是,在Windows CE中无法注册全局鼠标事件挂钩。

以上是操作系统解决方案。扩展Windows窗体和控件类没有一种简单的方法。可能你需要扩展你将使用的所有控件。最简单的解决方案是为所有控件和表单实现GetFocus方法。你可以在那里重置你的柜台。

顺便说一句,在桌面环境中,使用GetLastInputInfo可以轻松实现这一点。


0
投票

看看这篇文章:

http://social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/906b016d-f1ee-4b3e-b3df-1e3a6fea282a/

我遇到了同样的问题,最后使用Application.AddMessageFilter来获得适当的结果。该线程最终包含一个指向我写的示例项目的链接,显示了不活动计时器的工作,包括在必要时关闭子窗口以返回主窗口屏幕。

大卫


© www.soinside.com 2019 - 2024. All rights reserved.