前言(想象。所以有人不会问‘你想做什么?’(:我有一个Win32 C++应用程序。此应用程序希望知道用户何时希望通过Ctrl+Esc打开开始菜单当然,Ctrl+Esc是从操作系统中触发的,所以应用程序永远看不到它
我看过Windows虚拟密钥。我看到有很多特定于OEM的VK(0x92-0x96,0xE0,0xE9-0xF5,..(
所以我的想法是:
键盘筛选器驱动程序。当我的应用程序有焦点时,它会告诉键盘过滤器驱动程序。当我的驱动程序看到Ctrl键按下,并且Esc键按下时(我的应用程序有焦点(:--吞下Esc并将其替换为扫描代码,该代码将产生VK_0x92(OEM特定(。
由于我吞下了Esc,操作系统将永远看不到Ctr+Esc-
然后,我的应用程序将看到VK_0x92,并知道用户想要打开开始菜单并执行一些操作。
我的问题是如何在驱动程序(KEYBOARD_input_DATA(中"搅乱"输入以获得发言权VK_0x92是否出现在我的应用程序中?
提前感谢您的指点。
这一切都与键盘布局有关。我需要做的是不支持微软键盘布局创建器(MKLC(。请参见:键盘布局示例。
我发现这些样品很旧,很难通读。显然,美国和德国的键盘样本并不是最新的。
我编写了一个程序,通过指向特定的布局(例如KBDUS.dll(为键盘布局创建Visual Studio项目。我生成源代码.vxcproj,…然后我进行修改并构建它。
安装布局完全是另一回事。我已经在几个地方要求微软发布包含在MKLC生成的.MSI中的CustomAction Dll的源代码,但没有成功。