gpt4 book ai didi

c# - 当点击超出 C# 中的 GUI 边界时取消点击事件

转载 作者:行者123 更新时间:2023-11-30 17:53:45 25 4
gpt4 key购买 nike

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

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

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

对于击键,我尝试检查 KeyPress 事件的 e.KeyChar != '\t' && e.KeyChar != '\r' 参数(\r 是 Enter 键会是?)并取消事件,甚至直接使用语句 e.Handled = true;,但这也不起作用。无论哪种方式,我仍然可以使用 alt-tab。

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

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

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

最佳答案

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

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

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

关于c# - 当点击超出 C# 中的 GUI 边界时取消点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com