键盘筛选器驱动程序扫描码-> VK _ ??? 特定于OEM

问题描述

序言(虚构。所以没有人问'您要做什么?): 我有一个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出现在我的应用程序中吗?

提前感谢任何指针。

解决方法

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

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

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

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