Autohotkey AHK递归映射?(将RAlt映射到已映射到其他键的RWin)

Autohotkey AHK递归映射?(将RAlt映射到已映射到其他键的RWin),autohotkey,keymapping,alt-key,windows-key,Autohotkey,Keymapping,Alt Key,Windows Key,我有一堆RWin+X=>Y映射。我希望RAlt映射到RWin,以便RWin+X=RAlt+X。例如: ; RWin+J => Left >#j::SendInput,{LEFT} 这很好,我可以按住RWin并按j,它将继续向左侧发送。现在,让我们在该映射之前添加以下内容: RAlt::RWin 如果我按住RAlt,然后按j,它将正确地向左侧发送RAlt,但如果我按住RAlt并再次按j,它将向左侧发送j。我必须释放拉尔特,然后再按一次 有没有办法解决这个问题?这是我根据您的问题提出

我有一堆
RWin+X=>Y
映射。我希望
RAlt
映射到
RWin
,以便
RWin+X
=
RAlt+X
。例如:

; RWin+J => Left
>#j::SendInput,{LEFT}
这很好,我可以按住
RWin
并按
j
,它将继续向左侧发送
。现在,让我们在该映射之前添加以下内容:

RAlt::RWin
如果我按住
RAlt
,然后按
j
,它将正确地向左侧发送
RAlt
,但如果我按住
RAlt
并再次按
j
,它将向左侧发送
j
。我必须释放拉尔特,然后再按一次


有没有办法解决这个问题?

这是我根据您的问题提出的。这是一个解决方案:

#J::
If (GetKeyState("RAlt", "P") Or GetKeyState("RWin", "P")) {
    SendInput,{LEFT}
}
Return

RAlt::
While GetKeyState("RAlt", "P") {
        ; Add any Key in {Key} format followed by Period . that you want to act as an EndKey.
        Input, Key, L1 M T1, {space}.{esc}.{shift}.{enter}
                         .{tab}.{backspace}.{alt}.{home}
                         .{delete}.{pgup}.{pgdn}.{end}
                         .{up}.{down}.{left}.{right}
            If (Key <> "") {
                SendInput, {RWin down}{%Key%}{Rwin Up}
                }
            If InStr(ErrorLevel, "EndKey:") 
                Send % "{" . StrReplace(ErrorLevel, "EndKey:") . "}"
    }
Return
#J::
如果(GetKeyState(“RAlt”、“P”)或GetKeyState(“RWin”、“P”)){
SendInput,{LEFT}
}
返回
拉尔特::
而GetKeyState(“RAlt”、“P”){
;添加{Key}格式的任何键,后跟句点。您希望用作结束键。
输入,键,L1 M T1,{space}.{esc}.{shift}.{enter}
.{tab}.{backspace}.{alt}.{home}
.{delete}.{pgup}.{pgdn}.{end}
.{上}.{下}.{左}.{右}
如果(键“”){
SendInput,{RWin down}{%Key%}{RWin Up}
}
如果安装(错误级别,“结束键:”)
发送%“{”.StrReplace(ErrorLevel,“EndKey:”)。“}”
}
返回

我认为这是不可能的。为什么不能将相同的操作分配给两个键?我在映射
RAlt
时遇到了一些问题,例如,我有一个映射
#^!j::SendInput,^!{LEFT}
-它将
RWin+Ctrl+Alt+j
映射到
Ctrl+Alt+LEFT
-问题是如果我使用
>而不是
#
ahk会感到困惑,因为现在涉及到两个ALT。我尝试指定我想要
而不是
记不清它到底给了我什么,但它要么是一个错误,要么是给了我错误的地图,它又被弄糊涂了。RWin工作得很好,所以我想我应该将RAlt映射到它,因为它更容易按压,并且对我的手施加的压力更小。我可能只使用RAlt映射,而忽略那些具有
的映射可能是您的键盘有AltGr键而不是右Alt键吗`错误:传递给函数的参数太少。特别是:StrReplace(ErrorLevel,“EndKey:”)。“}”``您使用的是最新版本的自动热键吗?在我的系统上运行良好。