禁用 Alt 键的 AutoHotkey 快捷键

问题描述

设置

带有美式键盘布局的 Windows 10(当前版本)上的 AutoHotkey v 1.1.32.00。

目标

通过使用带有右 Alt 键 = RAlt 的快捷键,使用不存在的键扩展美式键盘布局。因此,RAlt 键应完全禁用,仅用于新的快捷键(左 Alt 键 = LAlt 保留用于程序菜单跳转和类似操作)。
示例:

  • RAlta 一起按下应该打印 ä一个特殊的德语字母)
  • RAlty 一起按下应该打印 ¥(日元)。

第一次尝试

#MenuMaskKey vkFF

key_map_lower := {a: "ä",y: "¥"}

RAlt::
for key in key_map_lower {
    Hotkey,$%key%,hotkey_label_lower,On
}
return

RAlt Up::
for key in key_map_lower {
    Hotkey,Off
}
return

hotkey_label_lower:
Send,% key_map_lower[SubStr(A_ThisHotkey,2)]
return

这很好用,目前没有问题。

问题

组合 RAlt+a=ä 只打印小写的德语特殊字母,但也有大写的等效字母。因此,需要一个新规则,如下所示:RAlt+Shift+a=Ä.

我对此的尝试:

#MenuMaskKey vkFF

; lowercase letters

key_map_lower := {a: "ä",2)]
return

; capital/uppercase letters

key_map_upper := {a: "Ä"}

RAlt & +::
for key in key_map_upper {
    Hotkey,hotkey_label_upper,On
}
return

RAlt & + Up::
for key in key_map_upper {
    Hotkey,Off
}
return

hotkey_label_upper:
Send,% key_map_upper[SubStr(A_ThisHotkey,2)]
return

但这仅适用于以前的小写字母。大写字母不出现。

另类尝试

RAlt::
Hotkey,a,label_a,On
Hotkey,y,label_y,+a,label_a_,On
return

RAlt Up::
Hotkey,Off
Hotkey,Off
return

label_a:
Send,ä
return

label_y:
Send,¥
return

label_a_:
Send,Ä
return

这适用于小写和大写。 但是 大写仅在 Shift 之前按 RAlt 时才有效。当先按 Shift 再按 RAlt 时,窗口菜单会聚焦。

问题

怎么可能

  1. 修复第二个脚本,以便先按 Shift 还是 RAlt 并不重要?
  2. 或者如何修复第一个脚本以使其正常工作,同时忽略 RAlt 和 Shift 的顺序?

我猜第一次尝试更紧凑、更健壮,因为冗余更少,行也更少。

(另外,我认为这两次尝试在代码中都没有任何美感,但是在第一次尝试中将小写和大写组合在一个数据结构中只会导致更多问题。通过这种加倍至少小写字母的工作。但我我也感谢所有优化。)

补充问题

我也想映射 RAlt+`=°
这在第二次尝试中是可能的,因为标签是手动分配的。但是第一次尝试这是不可能的。所以这是第一次尝试的下一个问题。

附加

在某些来源中,他们将 >! 用于 RAlt,但也没有运气。

来源

autohotkey.com 上的原始来源以及关于 RAlt 组合键 here 的一些讨论。

解决方法

这对您有用吗?

dict={'name':'ed|tom|pete','surname':'abc|def'}

“*”,通配符,即使按下额外的修饰符,也能让热键触发。标签内部,它检查是否按下了 shift。