早上好,
我是一款中型 PDA 应用程序的开发人员,该应用程序将在街道上使用。 PDA 将包含一些模糊敏感数据(姓名和地址等)。移动数据库上的加密已经处理完毕,但是,如果有人在登录时拿到 PDA,他们就可以愉快地浏览数据,直到电池耗尽或关闭应用程序并不得不重新登录。
当用户访问 PDA 应用程序时,他们需要输入用户名和 PIN 码。该软件的第 1 版在系统中的每个按钮中都添加了一个事件,因此当按下按钮时,它会更新一个名为 LastActionTime 的变量。主窗体上运行一个计时器,如果 LastActionTime 超过 10 分钟,系统将再次弹出登录窗体,直到前一个用户/管理员再次登录(就像 Windows 锁定屏幕一样)。
这工作得很好...从某种意义上...问题是它只处理按钮而不处理其他控件,如 ListViews、PictureBoxes 等。
有什么好的方法可以实现这一点吗?例如,有没有一种方法可以扩展 Windows 窗体类来处理每个事件并相应地更新该变量?或者我可以做一些类似 Windows 的事情来处理表单上的每个鼠标事件吗?
为了完全简洁,我想要实现的是,当 PDA 屏幕/按钮 10 分钟没有被触摸时,PDA 会知道这一点并允许我触发我的锁定方法。
任何想法、帮助和指导将不胜感激。
编辑:我在 Windows Mobile 6.0 上使用 Compact Framework 2.0,但该功能需要在 Windows Mobile 5.0 及更高版本上运行。
最佳答案
一种可能的解决方案是依靠 PDA 进入电源空闲状态。您可以使用 OpenNETCF.WindowsCE.PowerManager.PowerIdle 事件为此注册通知。事实上,考虑电源管理因素是个好主意。您不能期望您的 PDA 始终处于相同状态。
另一个解决方案是监视输入驱动程序的非事件事件(请参阅此 link )。然而,这个解决方案是非常特定于设备的。
不幸的是,Windows CE 中无法注册全局鼠标事件 Hook 。
以上是操作系统解决方案。扩展 Windows 窗体和控件类并没有简单的方法。也许您需要扩展您将使用的所有控件。最简单的解决方案是为所有控件和表单实现 GetFocus 方法。您可以在那里重置计数器。
顺便说一下,在桌面环境中,这可以通过 GetLastInputInfo 轻松实现。
关于events - Compact Framework - 在不活动一段时间后锁定 UI 的超时功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/349255/