c# - 如何禁用热键(除ctrl + alt +删除)

问题描述:

我有一个winform应用程序,我想在此应用程序的执行过程中禁用一些组合键。c# - 如何禁用热键(除ctrl + alt +删除)

我想要禁用除Ctrl+Alt+Delete之外的所有组合键(Ctrl+Esc,Alt+TabWinKeys等)。

我使用c#进行编程。

谢谢。

+1

[Block Control + Alt + Delete]的可能重复(http://stackoverflow.com/questions/1660106/block-controlaltdelete) – Fischermaen 2011-12-19 10:29:00

+0

您必须创建键盘挂钩,但可能您必须导入一些Windows DLL。 – Rolice 2011-12-19 10:30:05

+4

@Fischermaen这里的问题说***除了* Ctrl + Alt + Delete **,与您链接的副本完全相反。 – 2011-12-19 10:30:28

正确的做法是根本不使用C#(或任何编程语言)。

相反,您需要利用Windows对内部支持的有限用户帐户和其他安全相关规定。你可以锁定一台电脑,使用户无法做任何事情。这种类型的事情由组策略控制,而不是单个应用程序应该控制的东西。

您可以询问有关组策略配置的更多问题,并在另一个处理此类问题的Stack Exchange站点Server Fault上锁定Windows计算机。但我建议先做一个搜索,看看你的问题是否已经在那里得到解答!


如果你绝对必须这在C#中,您唯一的解决方案将是一个低级别的键盘钩子。首先,因为这是您可以在C#中创建的唯一类型的钩子,第二,因为您需要在任何其他应用程序(包括操作系统本身)能够接收并处理它们之前拦截并放弃按键。

这是一件好事,您在问题中明确排除了Ctrl + Alt + Delete,因为即使使用低级别键盘钩子,您也无法限制该设置。

你会找到一个示例实现here on Stephen Toub's blog

的技巧是,你不会呼叫CallNextHookEx()功能为您希望放弃按键,防止被传递到钩链的下一个应用程序中的事件信息。由于每documentationCallNextHookEx()

调用CallNextHookEx方法是可选的,但强烈建议;否则,已安装挂钩的其他应用程序将不会收到挂接通知,并可能因此导致行为不正确。您应该调用CallNextHookEx,除非您绝对需要阻止通知被其他应用程序看到。

所以,你需要确保你呼吁普通键盘输入功能,但不您要扔掉。而不是CallNextHookEx,你会想要返回1- new IntPtr(1)

在示例代码中,所有这些都会发生在HookCallback方法中,每次收到键盘事件时都会调用该方法。在vkCode值上使用switch声明(它为您提供被按下的键的virtual key code),以确定您想要拒绝的输入。

+0

谢谢。我已经找到了适用于我的解决方案[在CodeProject](http://www.codeproject.com/KB/system/CSLLKeyboard.aspx),并阻止除Alt + Ctrl + Delete之外的所有组合键。 – 2011-12-19 14:36:32

+0

@ZelterAdy:的确如此。这与我在这里描述的方法相同。有很多C#实现可以在线找到;我联系的那个人很好,很简单。 – 2011-12-20 00:24:02