2015-09-30 213 views
1

我有一堆RWin+X => Y映射。我想RAlt映射到RWin,以便RWin+X == RAlt+X。例如:AHK递归映射? (映射到其他键映射到RWin

; RWin+J => Left 
>#j::SendInput,{LEFT} 

工作正常,我可以按住RWin并按j,它将继续发送Left。现在让我们添加之前映射以下:

RAlt::RWin 

如果我持有RAlt然后按j,它会正确地发送Left,但如果我继续保持RAlt并再次按下j,它会发出j,而不是Left 。我将不得不释放RAlt并再次按下。

有什么办法解决这个问题吗?

+0

我不认为这是可能的。为什么你不能将相同的动作分配给两个键? – wOxxOm

+0

那么我有一些问题映射'RAlt',例如我有这张地图'>#^!j :: SendInput,^!{LEFT} - 它将'RWin + Ctrl + Alt + j'映射到'Ctrl + Alt +左' - 问题是如果我使用'>!'而不是'>#'ahk会感到困惑,因为现在有两个参与者。我试着指定我希望'<!'而不是'!'记不清楚它给了我什么,但它可能是一个错误,或者它再次让我感到困惑,给我错误的地图。 RWin工作正常,所以我认为我会将RAlt映射到它上面,因为它更容易按下,并且减轻了我的压力。我可能只是用RAlt地图去忽略那些有'!'的地图 – vexe

+0

难道你的键盘有AltGr键而不是右Alt键吗? http://ahkscript.org/docs/Hotkeys.htm#Symbols – user3419297

回答

1

这是我根据你的问题想出来的。这是一个解决方案:

#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 
+0

'错误:传递给函数的参数太少。具体来说:StrReplace(ErrorLevel,“EndKey:”)。 “}”'' – vexe

+0

您使用的是最新版本的AutoHotkey?在我的系统上正常工作。 – errorseven