【发布时间】:2010-11-15 22:11:53
【问题描述】:
如何在 Windows 中使用 c++ 完全禁用键盘?完全禁用我的意思是即使 Ctrl+Alt+Delete 也不起作用。我确实考虑过使用键盘驱动程序,但我认为您需要在安装后重新启动计算机,但因为我只需要禁用它几分钟,这不会真正起作用。
【问题讨论】:
-
你认为你为什么需要这样做?
如何在 Windows 中使用 c++ 完全禁用键盘?完全禁用我的意思是即使 Ctrl+Alt+Delete 也不起作用。我确实考虑过使用键盘驱动程序,但我认为您需要在安装后重新启动计算机,但因为我只需要禁用它几分钟,这不会真正起作用。
【问题讨论】:
这是不可能的。
WinLogon 被设计为一个拦截 Ctrl+Alt+Del 按键的进程,即使所有其他事情都挂起或死机. 这是针对恶意会话等的故障保护。因此没有明显的解决方法。
也许键盘过滤器驱动程序会使您的请求成为可能,但这是一个真正的内核驱动程序。
【讨论】:
如果不移除键盘或更换键盘驱动程序,您无法禁用 Ctrl-Alt-Delete,它会生成内核级通知.
【讨论】:
您可以使用BlockInput 函数。但它不会阻止 CTRL + ALT + DEL。
【讨论】:
您可以安装一个键盘挂钩并过滤掉消息,但您可能需要将您的应用程序作为最顶层的窗口。即使这样 Ctrl+Alt+Del 也不会被过滤掉。
这是 MSDN 上的 SetWindowsHookEx
【讨论】:
好的,这里有几个随机建议。我没有明确的答案,但这是我要开始的地方:
1) SetupDiRemoveDevice 可能是您要调用的 API。虽然要调用它,但您需要进行许多其他设备枚举调用。枚举您的 HID 和 USB 设备并找到键盘。首先为初学者寻找实际设备的 VID/PID。
2) 删除驱动程序 kdbclass.sys 和 kbdhid.sys。你将与 Windows 系统文件作斗争来做到这一点。我不知道这是否可行,但听起来很有趣且简单。
3) 编写 USB 过滤器驱动程序。您的驱动程序需要知道(或传递)要过滤的设备的 vid/pid,但它可能会起作用。
【讨论】:
如果你想暂时禁用 Ctrl+Alt+Del,我建议通过使用 SuspendThread() 然后 ResumeThread() 从 processthreadsapi.h 暂停 winlogon(ofc 你必须是令人讨厌的管理员)
【讨论】: