当点击超出C#中GUI界限时取消Click事件

时间:2013-06-08 02:39:38

标签: c# forms events

所以我正在尝试创建一个锁定主机的程序。到目前为止它的工作方式是它有一个主窗体,可以创建密码,并且可以锁定计算机。创建密码后,它将存储在用户的AppData中的位置,在MD5中。

我已经完成了密码创建和检查位,但我无法弄清楚如何使锁定以我想要的方式工作。通常,将运行的计算机将通过Windows(即WinKey + L)锁定,但是需要监视将始终运行的不同程序。但是,由于这些计算机有时可能在公共场所,我正在寻找一种方法,只有在验证用户身份后才允许访问输入。

我可以阻止程序被终止,但是对于我来说,检测GUI界限之外的点击和击键有些问题。我尝试处理Deactivate事件,但这不起作用,因为我无法取消随之发生的点击。我也尝试过使用MouseMove,但后来意识到只有当鼠标在窗体的边界内移动时才会引发事件。我也试着听过离开事件,但这也没有用。

对于击键,我试过检查一下KeyPress事件的e.KeyChar != '\t' && e.KeyChar != '\r'参数(是\ r \ n输入键是什么?)并取消该事件,甚至直截了当地使用语句e.Handled = true; ,但这也不起作用。无论哪种方式,我仍然可以使用alt-tab。

此外,由于按键检查的问题,我意识到我可以只使用Deactivate检查,并处理FormClosing;但是,我的Deactivate事件处理程序也不起作用,它包含的唯一代码是:

this.BringToFront();
this.Focus();

此时,我确定我正在为击键做什么,停用处理程序是小错误,但我不知道如何处理点击问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

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

但它只是触及了主题的表面。你将不得不学习一些关于windows内部和windows API的知识。有一些关于这个主题的书籍非常深刻。