-2

我正在编写一个在启动时进行碎片整理的应用程序。但是,问题是在启动时监视器启动并出现黑屏,按下时它对任何键盘键都没有响应?

我的代码是这样的:

  1. 我将 NtCreateFile 调用到对象“Device\KeyboardClass0”,它成功返回并带有对象的句柄。
  2. 然后我用 NtCreateEvent 创建事件并成功返回。
  3. 然后我用句柄和事件调用 NtReadFile。
  4. 然后我在 NtWaitForSingleObject 上等待事件在有要阅读的内容时向我发出信号。
  5. 当我收到信号时,我将读取用户按下的键。

问题是从未达到第 5 步,我正在按下 USB 键盘键,但没有任何反应,就好像没有按下键盘一样。

相同的代码适用于 PS/2 键盘,但使用 USB 键盘我什么也看不懂。

4

1 回答 1

1

最后,我得到了解决方案。问题与您使用的键盘类型有关,即 PS2 或 USB。您需要获取键盘接口的所有实例并同时从所有键盘读取。由于主板上有 PS2 键盘的端口,它在启动时优先。而对于 USB 键盘,我们需要添加一些延迟是因为,Windows 系统只需要更多的时间来注册 USB 键盘类实例。

于 2014-12-31T06:39:26.053 回答