Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当单击位于GUI之外时取消单击事件';C中的s界#_C#_Forms_Events - Fatal编程技术网

C# 当单击位于GUI之外时取消单击事件';C中的s界#

C# 当单击位于GUI之外时取消单击事件';C中的s界#,c#,forms,events,C#,Forms,Events,所以我正在尝试创建一个程序来锁定主机。到目前为止,它的工作方式是它有一个主窗体,可以在其中创建密码,并且可以锁定计算机。创建密码时,它存储在用户的AppData中的MD5位置 我已经很好地完成了密码的创建和检查,但是我无法找到如何使锁按我想要的方式工作。通常情况下,运行该程序的计算机将通过Windows(即WinKey+L)锁定,但需要监控始终运行的不同程序。然而,由于这些计算机有时可能在公共场所,我正在寻找一种方法,仅允许在验证用户身份后访问输入 我可以很好地防止程序被终止,但对我来说,检测G

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

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

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

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

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

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

在这一点上,我确信我对击键和停用处理程序所做的都是小错误,但我不知道如何解决单击问题。非常感谢您的帮助。

您需要的是操作系统提供的一组功能更强大的接口。您可以在平台上调用这些函数,但必须知道如何封送API。这是因为许多允许你进行更大控制的库都是用C++编写的。如果使用本地C++,调用这些命令更自然,但是C++需要更仔细的注意,并且需要更长的时间来学习。 如果希望取消或覆盖击键或单击,可以使用全局钩子来实现。这里有一篇关于它的文章


但它只是触及主题的表面。您必须了解一些有关windows内部构件和windows API的知识。有一些关于此主题的书籍,内容非常深入。

Ctrl-Alt-Del和使用任务管理器终止应用程序怎么样?如果你试图阻止用户在没有通过你的应用程序的情况下使用计算机,那么你将很难用C#做任何事情。Windows可以设置一个kiosk模式,或者你可以用非托管的C++替换GINA,甚至不用麻烦用一个简单的GUI程序来尝试,有很多方法可以绕过它。正如@JohnKoerner所写的,您应该研究GINA/kiosk模式。基于C的方法将是徒劳的。你不能用自己的程序锁定机器。用户总是有办法重新控制机器。原因很明显。您需要配置计算机以禁用此功能。谷歌“启用windows kiosk模式”了解如何启用。谢谢!我将研究全局钩子并使用C++来实现这一点。