如何在AutoHotkey中保持热键的修饰符有效?

时间:2014-07-15 21:51:32

标签: autohotkey hotkeys

我正在使用的媒体键盘没有完整的键,所以我试图使用AutoHotkey映射替代品。基本上,我想使用 Alt Gr 键和其他一些键来模拟丢失的键。这就是我所做的:

<^>!,::send {Home}
<^>!.::send {End}
<^>![::send {PrintScreen}
<^>!]::send {Insert}

但是,如果我想做相当于 Shift + Home (选择所有文本到行的开头),这不起作用,因为我我希望。我知道我可以在行的开头加*,这样即使我拿着 Shift Home 仍然会发送,但问题是那个我希望 Shift 键仍然有效,这样我就可以得到 Shift + Home

同样,如果我想要 Alt + 打印屏幕,则在按 Alt Gr 时按住 Alt [没有达到预期的效果。

我认为我可以设置额外的规则来捕捉这些组合,但肯定有一种方法让AutoHotkey不会丢弃我在按下热键时所持有的任何修饰符,以便我使用它的任何组合'工作?

编辑(2014-07-16):

这是我的脚本的最新版本,其中包含一些注释,清楚地说明了我想要实现的目标。除了最后一行之外,此脚本中的所有内容都有效。出于某种原因,即使我正在尝试发送Alt + PrtScn,它也只被视为PrtScn。

; Home ( by pressing AltGr + , )
<^>!,::send {Home}
; Shift + Home ( by pressing Shift + AltGr + , )
+<^>!,::send +{Home}

; End ( by pressing AltGr + . )
<^>!.::send {End}
; Shift + End ( by pressing Shift + AltGr + . )
+<^>!.::send +{End}

; Insert ( by pressing AltGr + [ )
<^>![::send {Insert}
; Shift + Insert ( by pressing Shift + AltGr + [ )
+<^>![::send +{Insert}

; PrtScn ( by pressing AltGr + ] )
<^>!]::send {PrintScreen}
; Alt + PrtScn ( by pressing LeftAlt + AltGr + ] )
<!<^>!]::send !{PrintScreen}

2 个答案:

答案 0 :(得分:2)

使用{Blind}属性将传递修饰键。

e.g。

<^>!,::send {Blind}{Home}

请参阅:Send existing modifiers with a key in autohotkey?

答案 1 :(得分:1)

事实证明,由于 AltGr 本身实际上是<组合< AltGr ,我想用Autohotkey做的一些组合,包括 AltGr 键。 kbd>控制和右Alt 。因此,并非所有修饰符都可以与该键一起使用,并且某些AutoHotkey命令在尝试与 AltGr 一起使用时会产生不必要/意外的结果。

我使用新键盘(英国版的Microsoft All-in-One媒体键盘)使用的脚本的最终版本如下:

; Set an initial state for the lock keys
SetCapsLockState, off
SetNumLockState, on
SetScrollLockState, off

; Home ( by pressing AltGr + , )
<^>!,::send {Home}
; Shift + Home ( by pressing Shift + AltGr + , )
+<^>!,::send +{Home}

; End ( by pressing AltGr + . )
<^>!.::send {End}
; Shift + End ( by pressing Shift + AltGr + . )
+<^>!.::send +{End}

; Insert ( by pressing AltGr + [ )
<^>![::send {Insert}
; Shift + Insert ( by pressing Shift + AltGr + [ )
+<^>![::send +{Insert}

; PrtScn ( by pressing AltGr + ] )
<^>!]::send {PrintScreen}
; Alt + PrtScn ( by pressing Alt + ] )
!]::send !{PrintScreen}

; Scroll Lock ( by pressing AltGr + \ )
<^>!\::send {ScrollLock}

; Pause/Break ( by pressing AltGr + p )
<^>!p::send {Pause}
; Win + Pause/Break ( by pressing Shift + Alt + p )
+!p::send #{Pause}
; Control + Pause/Break ( by pressing Shift + Ctrl + p )
+^p::send ^{CtrlBreak}

; Run Calculator ( by pressing AltGr + c )
<^>!c::Run Calc