所以我正在尝试创建一个可以锁定主机的程序。到目前为止,它的工作方式是它有一个主窗体,可以在其中创建密码,并且可以锁定计算机。创建密码后,它会存储在用户 AppData 中的某个位置(以 MD5 格式)。
我已经完成了密码创建和检查位,但我无法弄清楚如何使锁按我想要的方式工作。通常,运行此程序的计算机将通过 Windows 锁定(即 WinKey+L),但需要监控始终运行的不同程序。但是,有时这些计算机可能在公共场所,我正在寻找一种方法,仅在验证用户身份后才允许访问输入。
我可以很好地防止程序被终止,但是对我来说检测 GUI 边界之外的点击和击键有点问题。我尝试处理 Deactivate 事件,但这不起作用,因为我无法取消随之发生的点击。我也尝试过使用 MouseMove,但后来意识到只有当鼠标在表单边界内移动时才会引发该事件。我也试过听离开事件,但这也没有用。
对于击键,我尝试检查 KeyPress 事件的参数e.KeyChar != '\t' && e.KeyChar != '\r'
(是 \r 回车键是什么?)并取消事件,甚至直接使用语句e.Handled = true;
,但这也不起作用。无论哪种方式,我仍然可以使用 alt-tab。
此外,对于击键检查问题,我意识到我可以只使用 Deactivate 检查,并处理 FormClosing;但是,我的 Deactivate 事件处理程序也不起作用,它包含的唯一代码是:
this.BringToFront();
this.Focus();
在这一点上,我确定我为击键和停用处理程序所做的都是小错误,但我不知道如何解决点击问题。任何帮助将不胜感激。