在默认的德语键盘布局中^
,反引号/正引号是死键。
但是,作为一名程序员,我通常不需要写重音符,而是写字符本身。在这种情况下,需要按两次键并退格或按一次键和空格键非常烦人。
所以我想知道是否(以及如何)可以改变这些键以便他们立即创建角色而不是等待第二个角色。
答案1
您可以使用微软的键盘布局创建器修改布局。下载并安装后,请执行以下操作:
- 点击“文件”并“加载现有键盘”。
- 死键显示为灰色 - 右键单击任意键,您可以分配或取消分配死键行为:
完成分配和取消分配后,转到“项目”->“属性”并编辑描述。“名称”有 8 个字符的限制(无论出于何种原因),因此只需将其设置为“Deutsch”,并将描述设置为“Deutsch - No Dead Keys”或任何您喜欢的内容。
完成后,转到“项目”并选择“构建 DLL 和安装程序包”。创建时,它会说日志文件中有一些警告,但它们可能可以忽略。下一个提示将询问您是否要打开文件已写入的目录 - 如果您这样做,您只需单击一下即可安装布局。
打开 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": "^" },
...
]