【问题标题】:How can I disable Alt-F4 and Ctrl-Alt-Del by using hooking?如何使用挂钩禁用 Alt-F4 和 Ctrl-Alt-Del?
【发布时间】:2014-07-22 23:53:09
【问题描述】:

如何禁用 Alt-F4 和 Ctrl-Alt-Del?

我可以用 Alt 键锁定一个键的所有组合吗?

我从网上找了一个样例,它只能禁用 Alt+Tab、Alt+Esc、Ctrl+Esc、Windows Key

Select Case wParam
        Case 256, 257, 260, 261
            'Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key     
            blnEat = ((lParam.vkCode = 9) AndAlso (lParam.flags = 32)) Or _
            ((lParam.vkCode = 27) AndAlso (lParam.flags = 32)) Or _
            ((lParam.vkCode = 27) AndAlso (lParam.flags = 0)) Or _
            ((lParam.vkCode = 91) AndAlso (lParam.flags = 1)) Or _
            ((lParam.vkCode = 92) AndAlso (lParam.flags = 1))
    End Select

在哪里可以看到lParam.vkCode = ??中的按钮代码列表? 如何使其能够禁用 Alt-F4 和 Ctrl-Alt-Del 或禁用所有组合键与 Alt 键?

【问题讨论】:

    标签: vb.net winapi


    【解决方案1】:

    您不能拦截 CTRL+ALT+DEL。它被称为安全注意密钥,如果应用程序可以拦截它,那么计算机的安全性就会受到威胁。

    你可以做的就是配置 Windows 通过禁用任务管理器来忽略 Ctrl+Alt+Del:http://msdn.microsoft.com/en-us/library/ms811991.aspx

    您没有理由不能拦截 ALT+F4,但由于您的问题还没有完全清楚,所以很难给您建议。特别是您提供的代码与上下文无关,我无法猜测它会响应哪些事件。

    如果您正在寻找 F4 的 key code,那么它就是 &H73。我强烈建议您使用标准命名常量而不是硬编码的文字值,例如vbKeyF4.

    【讨论】:

    • 我可以更改注册表以在应用加载时禁用 alt+ctrl+del 吗?
    • 我不知道,如果你能做到这一点,我会感到非常惊讶。这个问题是XY problem。你能告诉我们你想要达到的目标吗?
    【解决方案2】:

    您不能禁用 ctrl-alt-delete 组合,因为它永远不会到达应用程序级别。它由操作系统处理,并且仅由操作系统处理!

    你最好把键盘上的键撕下来。不过,有一些方法可以绕过此限制,例如编写自己的键盘驱动程序或通过 Gina 存根。

    【讨论】:

    • Gina 这些天不会带你去任何地方,它不再存在于 Vista/7 中。
    • @David 是真的,但他没有明确说这不是 NT
    • @freedompeace 你也没有说明这个限制,我的评论弥补了这个遗漏
    • 我可以在 windows xp sp3 中禁用 alt ctrl del 和 alt f4 吗??
    • @e-qi,是的,你可以。但不是通过你习惯的通常的钩子。以上方法都行。
    【解决方案3】:

    确实,即使使用全局键盘钩子也无法捕获 Ctrl+Alt+Del 组合,因为它直接传输到操作系统,但您可以轻松欺骗这一点。我不确定您的整个问题,但我认为您想在应用程序运行时禁用任务管理器。

    步骤:

    1. 我们的应用程序的 Onload 事件以隐藏模式启动任务管理器(现在如果用户按 Ctrl+Alt+Del 则不会发生任何事情)。
    2. 您的应用程序的 OnClose 事件只需关闭任务管理器。

    【讨论】:

      【解决方案4】:

      禁用 Alt + f4,它可以工作!

          Protected Overrides ReadOnly Property CreateParams() As CreateParams
          Get
              Dim cp As CreateParams = MyBase.CreateParams
              Const CS_NOCLOSE As Integer = &H200
              cp.ClassStyle = cp.ClassStyle Or CS_NOCLOSE
              Return cp
          End Get
      End Property
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        相关资源
        最近更新 更多