我如何重新映射冒号(“shift+period”)?

我如何重新映射冒号(“shift+period”)?

我正在重新映射 Qwerty 布局(丹麦语) 使用 AHK 转换为 Dvorak,因为我无法在这台电脑上安装自定义键盘布局。例如,这些可以正常工作:

:*:n::b  ; remap "n" to "b". This automagically also works for "N"-->"B".
:*:,::w  ; remap comma to lowercase "w".
:*:;::W  ; uppercase comma must be specifically coded.
:*:.::v  ; remap period to lowercase "v".

到目前为止一切顺利,但是这对于“冒号”不起作用,它应该变成大写的“V”。根据文档,我应该能够使用转义字符,但可能只能在输出中使用,而不是在触发器中使用?因为它不是字母键,此解决方案也不起作用。

我尝试过几种组合:

:*::::V      ; "hotstring is missing its abbreviation"
:*C::::V     ; "hotstring is missing its abbreviation"
:*C: `: ::V  ; this just produces a colon...
:*:`:::V     ; "invalid hotkey"
:*C:`:::V    ; "invalid hotkey"
`:::V        ; "line does not contain a recognized action."

注意:当然,我一次只尝试上述方法之一,但这里它们都显示出来,没有被注释掉。

答案1

新的 AutoHotKey 文档(由于某种原因,它们与旧文档没有链接)保留了遗留文档的倾向,使得查找此类事情变得非常困难。

您选择使用热字符串而不是热键其好处是永远不会让琴弦互相触发(从热字符串):

默认情况下,热字符串绝不会由任何 AutoHotkey 脚本产生的按键触发。这避免了热字符串反复触发彼此的无限循环的可能性。在 v1.1.06 及更高版本中,可以使用 #InputLevel 和 SendLevel 控制此行为。但是,自动替换热字符串始终使用发送级别 0,因此绝不会触发钩子热键或热字符串。

思考 发送输入应该默认情况下,操作方式类似,但我发现尝试使用带有 SendInput 的简单热键可能会触发其他热键(并且使用几乎相同的热字符串定义不起作用,可能是由于与冒号相关的怪癖),所以我不得不手动要求热键使用键盘挂钩(由于使用热字符串而自动安装):

#UseHook, On
:::SendInput, V ; Oddly enough, a colon as a hotkey trigger doesn't need 
                ; to be escaped, but a colon in a hotstring, unescaped or
                ; otherwise, just breaks things.
; Wouldn't get triggered by :, even if uncommented (that's good!)
; v::SendInput, colons in AHK are confusing
#UseHook, Off

你应该能够使用热字符串重新映射其他键,就像你已经做过的那样,尽管如果你真的想要,热键也可以工作,也许可以用#使用Hook正如我在上面的例子中所做和/或#输入级别/发送级别

相关内容