3

所以我正在尝试创建一个可以锁定主机的程序。到目前为止,它的工作方式是它有一个主窗体,可以在其中创建密码,并且可以锁定计算机。创建密码后,它会存储在用户 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();

在这一点上,我确定我为击键和停用处理程序所做的都是小错误,但我不知道如何解决点击问题。任何帮助将不胜感激。

4

1 回答 1

1

您正在寻找的是操作系统提供的一组更强大的接口。您可以对这些函数进行平台调用,但您必须知道如何编组 API。这是因为许多允许您更好地控制的库都是用 C++ 编写的。如果您使用本机 C++,调用这些命令会更自然,但 C++ 需要更仔细的注意并且需要更长的时间来学习。

如果您希望取消或覆盖击键或点击,您可以使用全局挂钩来实现。这是一篇关于它的文章http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

但它只是触及了主题的表面。您必须了解一些有关 Windows 内部结构和 Windows API 的知识。有一些关于这个主题的书籍,而且非常深入。

于 2013-06-08T03:55:20.477 回答