【问题标题】:Keyboard Filter Driver. Scan Code -> VK_??? (OEM Specific)键盘过滤器驱动程序。扫码 -> VK_??? (OEM 特定)
【发布时间】:2021-02-11 10:10:08
【问题描述】:

前言(虚构的。所以有人不会问'你想做什么?): 我有一个 Win32 C++ 应用程序。 此应用程序想知道用户何时想通过 Ctrl+Esc 打开开始菜单 当然,Ctrl+Esc 是从操作系统触发的,因此应用程序永远不会看到它。

我看过Windows Virtual Keys。 我看到有很多 OEM 特定的 VK (0x92-0x96,0xE0,0xE9-0xF5,..)

所以我的想法是:

键盘过滤器驱动程序。 当我的应用程序获得焦点时,它会告诉键盘过滤器驱动程序。 当我的驱动程序看到 Ctrl 按下并且 Esc 按下时(并且我的应用程序具有焦点): -- 吞下 Esc 并将其替换为会生成 VK_0x92(OEM 特定)的扫描码。

自从我吞下 Esc 后,操作系统将永远不会看到 Ctr+Esc

然后我的应用程序将看到 VK_0x92 并知道用户想要打开开始菜单并执行一些操作。

我的问题是如何在驱动程序 (KEYBOARD_INPUT_DATA) 中“处理”输入以便发表意见 VK_0x92 出现在我的应用程序中?

提前感谢您的任何指点。

【问题讨论】:

    标签: filter-driver


    【解决方案1】:

    这都是关于键盘布局的。 Microsoft Keyboard Layout Creator (MKLC) 不支持我需要做的事情。 请参阅:Keyboard Layout Samples

    我发现这些示例非常陈旧且难以阅读。显然,美国和德国键盘样本不是最新的。

    我编写了一个程序,通过指向特定布局(例如,KBDUS.dll)来为键盘布局创建 Visual Studio 项目。我生成源代码 .vxcproj,...然后进行修改并构建它。

    安装布局完全是另一回事。我已在多个地方要求 Microsoft 发布包含在 MKLC 生成的 .MSI 中的 CustomAction Dll 的源代码,但无济于事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      相关资源
      最近更新 更多