在c#中,当单击超出gui的范围时取消Click事件

本文关键字:范围 取消 事件 Click gui 单击 | 更新日期: 2023-09-27 18:17:23

所以我试图创建一个程序,将锁定主机。到目前为止,它的工作方式是有一个主要形式,可以创建密码,然后锁定计算机。当创建密码时,它以MD5格式存储在用户的AppData中的某个位置。

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

我可以很好地防止程序被终止,但是对我来说,在GUI的边界之外检测点击和击键有点问题。我尝试处理停用事件,但这不起作用,因为我无法取消与它一起发生的点击。我还尝试使用MouseMove,但后来意识到,只有当鼠标在窗体的边界内移动时才会引发事件。我也试着听Leave事件,但也没有工作。

对于击键,我尝试检查KeyPress事件的e.KeyChar != ''t' && e.KeyChar != ''r'参数(是'r Enter键是什么?)并取消该事件,甚至只是直截了当地使用语句e.Handled = true;,但这也不起作用。不管怎样,我还是可以alt-tab键

此外,与击键检查的问题,我意识到,我可以只使用一个停用检查,而不是处理FormClosing;然而,我的Deactivate事件处理程序也不起作用,它包含的唯一代码是:

this.BringToFront();
this.Focus();
在这一点上,我确信我为击键和停用处理程序所做的是小错误,但我不知道该如何处理单击问题。

在c#中,当单击超出gui的范围时取消Click事件

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

如果你想取消或覆盖击键或点击,你可以使用全局钩子。这里有一篇关于它的文章http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

但它只触及了主题的表面。你必须学习一些关于windows内部和windows API的知识。