键盘过滤器驱动程序。扫码-> VK_??? (OEM 特定)

Keyboard Filter Driver. Scan Code -> VK_??? (OEM Specific)

前言(虚构的。所以有人不会问'你想做什么?): 我有一个 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 并知道用户想要打开开始菜单并执行一些操作。

我的问题是我如何 'muck' 我的驱动程序中的输入 (KEYBOARD_INPUT_DATA) 才能发表意见 VK_0x92 出现在我的应用程序中?

提前感谢您的指点。

一切都与键盘布局有关。 Microsoft Keyboard Layout Creator (MKLC) 不支持我需要做的事情。 参见:Keyboard Layout Samples.

我发现示例非常古老且难以通读。显然美国和德国键盘样本不是最新的。

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

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