MS Keyboard Layout Creator 中特殊字符的 Unicode 代码点

Unicode Codepoints for special characters in MS Keyboard Layout Creator

我的目标:

我正在尝试让 MS Keyboard Layout Creator 允许我在按下 [R-Arrow] 键和 [Control] 键时执行回车 return/enter,但仍然让 [R-Arrow] 键在单独按下时正常执行(即向右移动一个字符)。我这样做是因为我的笔记本电脑键盘 [Enter] 键坏了,我想在继续使用另一个键盘之前先使用这个 hack 一段时间。是的,我知道买一个新的可能更容易。 :)

据我所知,我几乎已经想通了所有事情。 我仍然需要的唯一信息是 1) 向右箭头导航和 2) enter/carriage-return. 的确切十六进制代码点我希望有人可以指导我了解此信息.我找到了 the unicode reference 但我无法辨别哪些代码可以用于 马车 return 右箭头导航 不是右箭头ascii字符,我不关心那个)

我现有的 KLC 文件中的示例代码:

KBD Layout01    "Layout01 Description"
COPYRIGHT   "(c) 2017 Company"
COMPANY "Company"
LOCALENAME  "en-US"
LOCALEID    "00000409"
VERSION 1.0
SHIFTSTATE
0   //Column 4
1   //Column 5 : Shft
2   //Column 6 :       Ctrl
LAYOUT      ;an extra '@' at the end is a dead key

//SC    VK_     Cap 0   1   2
//--    ----        ----    ----    ----    ----
39  SPACE       0   0020    0020    -1      // SPACE, SPACE, <none>
53  DECIMAL 0   002e    002e    -1      // FULL STOP, FULL STOP,

我对代码的理解(空格键示例)

查看文件中已有的示例(spacedecimal),我得出以下结论:

注:以下括号中的例子仅指space栏。

  1. 第一个数字是键盘键(例如上面的39
  2. 该数字后面的单词是指代该键的指定标签(例如上面的 SPACE
  3. 接下来的三个数字是十六进制的 codepoints/symbols 指的是“SHIFTSTATES”
    1. 第一个是代码点,表示在按下 CAPSLOCK 时按下该键将输出的内容。
    2. 第二个是与 SHIFT 键同时按下时该键输出的代码点。
    3. 第三个是与 CONTROL 键同时按下时该键输出的代码点。

目标:找出右箭头导航和输入的代码

我已经想出了这么多我想按顺序添加的代码行,这样单独按下右键仍然会向右导航,但在 wihc 中,“control-right”组合将触发回车-return/enter

4d RIGHT 0 ??I don't know?? ??I don't know?? -1

我相信我知道以下内容

  1. 4d(第1列)是右方向键的键码
  2. 句柄 RIGHT(在第 2 列)是右箭头的 handle/name
  3. 0 (在第 3 列中表示如果按下大写锁定则不要更改键

我需要你的帮助才能弄清楚

  1. codepoint/hexadecimal/unicode 符号用于执行右箭头导航(如果我想让 [Shift]-[Right-Arrow] 使光标​​移动,我认为这就是第四列中的内容向右一个字符)。
  2. codepoint/hexadecimal/unicode 符号是用来执行回车的-return/enter(如果我想让 [Control]-[Right-Arrow]触发 enter/carriage-return).

可能是我弄错了,我需要的符号不是unicode码位;如果我错了,请纠正我,因为这些信息将帮助我更接近我的目标。任何帮助将不胜感激!

我不知道你是否还需要这个,因为我已经写下了大部分我 post 它。


我研究了一段时间,我还没有找到真正明确的答案,但我可以给你一些提示(我 post 尽管如此,我还是把它作为答案,因为它太笨重了,无法使用评论)。


我有一种强烈的感觉,你问的是不可能的(当按下 ctrl 等修饰符时,箭头等控制键无法映射到不同的 keys/characters/functions)。

我不是这些方面的专家,但我可以给你一些建议:

  1. (下面有大量信息与您的问题关系不大,但可能有助于您更好地理解)

    当您在 Windows 中按下一个键时,至少涉及 3 组代码:

    1. 扫码:这些是由硬件实际生成并发送到电脑的代码。我对它们知之甚少,我从来不需要使用它们,而且当它们更相关时我还太年轻。理论上它们可以因键盘而异,但它们在很大程度上是标准化的; USB 键盘是 真正 标准化的,据我所知,它们的扫描码应该是这些 HID Usage Tables (section 10). Wikipedia 中列出的那些 HID Usage Tables (section 10). Wikipedia 有一些信息,但不是传统键盘的完整列表代码。 不过您很可能不需要这些(但也许您会需要)。顺便说一下,这些扫描码 也传递给了应用程序(我不确定有多可靠),但他们几乎从不使用它们。
    2. 虚拟键代码: Windows 中的扫描代码由键盘驱动程序转换为 Microsoft 指定的一组通用键代码:Virtual-Key Codes.这些与键盘无关,并且是应用程序在需要处理单个按键时(通常)使用的内容。
    3. Unicode, 或其他字符集,字符: Windows 识别何时按下的键应该产生可打印字符并将这些字符传递给应用程序。在应用程序只对可打印字符感兴趣时,它只会查看这些字符,尽管当它们需要做更复杂的事情(快捷方式......)时,它们也可以访问虚拟键代码(并且,如果它们真的想要的,给扫码)。 Unicode是一个字符集,不是"key-codes set",所以它一般只包含可打印的字符。为了促进与 ASCII 和其他遗留字符集的互操作性,它还包括以前标准中定义的控制字符,但在这些控制字符中不存在箭头键,因此键盘箭头没有 unicode 代码点.
  2. 在 klc 的第二列中,您似乎必须将 virtual-key constant 的名称移除 VK_。确实很奇怪。

  3. 几个 Microsoft 文档页面说,您也可以在 Microsoft Keyboard Layout Creator 的 inc 目录中找到的 WDK kbd.h 文件有关于这个东西的详细信息.不过,就我个人而言,我不能

  4. 如果你真的想深入研究这个,已故的 Michael Kaplan's blog 可能在某处有你正在寻找的信息。

  5. 你最好的运气是最有可能使用其他应用程序。我偶然发现 KbdEdit 确实 处理箭头键,但它确实似乎无法在与修饰符一起使用时为键分配不同的功能(但你可以完全改变键的效果,不管按下的修饰符是什么。

  6. 对于 Enter 键,您可能需要使用虚拟键,即 0D (VK_RETURN)。

  7. 用于指示 Windows 上的换行符的字符序列是 CR LF,它具有(在 Unicode 和几乎所有其他现有字符集中)代码点0D 0A, 分别.
    通知应用程序已输入字符的 Windows 消息(上面的第 1.3 点 - 顺便说一句,我指的是 WM_CHAR 消息)尽管当您只报告 CR (0D)按回车;因此,如果这些 klf 文件在某些​​部分使用 unicode 代码点,那么他们很有可能使用它 (CR) 来指示回车键。


总而言之,您最好的选择可能是将 Enter 分配给不同的键(例如功能键,正确的 ctrl 或 win 键,如果有的话)或大写锁定)。