如何在具有德语键盘布局的 Windows 7 上使 ^ 和 ` 成为非死键

如何在具有德语键盘布局的 Windows 7 上使 ^ 和 ` 成为非死键

在默认的德语键盘布局中^ ,反引号/正引号是死键。

但是,作为一名程序员,我通常不需要写重音符,而是写字符本身。在这种情况下,需要按两次键并退格或按一次键和空格键非常烦人。

所以我想知道是否(以及如何)可以改变这些键以便他们立即创建角色而不是等待第二个角色。

答案1

您可以使用微软的键盘布局创建器修改布局。下载并安装后,请执行以下操作:

  1. 点击“文件”并“加载现有键盘”。
  2. 死键显示为灰色 - 右键单击​​任意键,您可以分配或取消分配死键行为:

在此处输入图片描述

  1. 完成分配和取消分配后,转到“项目”->“属性”并编辑描述。“名称”有 8 个字符的限制(无论出于何种原因),因此只需将其设置为“Deutsch”,并将描述设置为“Deutsch - No Dead Keys”或任何您喜欢的内容。

  2. 完成后,转到“项目”并选择“构建 DLL 和安装程序包”。创建时,它会说日志文件中有一些警告,但它们可能可以忽略。下一个提示将询问您是否要打开文件已写入的目录 - 如果您这样做,您只需单击一下即可安装布局。

  3. 打开 Windows 中的“键盘设置”,检查新的键盘布局是否已添加到 Windows 列表中。

完毕!

答案2

我无法让基于键盘创建者的方法奏效。相反,我想出了一个自动热键脚本。检测当前键盘布局的方法取自如何找出当前的键盘布局?

这个想法是自动发送“死键 + 空格”序列。由于这会对没有死键的布局产生错误的影响,因此我根据语言环境 ID 进行过滤,对于德语键盘,这符合模式0x0407????。由于键盘布局不是硬编码的,因此此值可能无法移植。

我考虑过使用GetKeyboardLayoutNameA,但价值有时候会过时。

;;;; ------ NO DEAD KEYS ------

GetCurrentLocaleId()
{
  ;; Source:
  ;;   https://autohotkey.com/board/topic/
  ;;   22900-how-to-find-out-what-is-the-current-keyboard-layout/
  WinGet, WinID,, A
  ThreadID := DllCall("GetWindowThreadProcessId", "Int", WinID, "Int", 0)
  InputLocaleID := DllCall("GetKeyboardLayout", "Int", ThreadID)
  Return InputLocaleID
}

IsGermanKbdLayout()
{
  Return GetCurrentLocaleId()//0x10000 == 0x407
}

#If IsGermanKbdLayout()
SC029::SendRaw % "^ "
SC00D::SendRaw % "´ "
+SC00D::SendRaw % "`` "
;; Find scan codes by viewing script's console > view > key history

答案3

自由贸易协定

如果您使用新的微软终端作为您的日常终端驱动程序(如果没有尝试过,它绝对很棒),您可以使用设置中的宏禁用死键,如下所示:

"actions":
[
    ...
    { "command": { "action": "sendInput", "input": "^" }, "keys": "^" },
    ...
]

相关内容