Autohotkey 自动热键。如何使工作既“热键”又“热键”+;键`?
我想在我的脚本中有两个热键。即Autohotkey 自动热键。如何使工作既“热键”又“热键”+;键`?,autohotkey,Autohotkey,我想在我的脚本中有两个热键。即LWin-Up和LWin+LAlt-Up。我试着这样做: LAlt & LWin Up:: ;I've also tried commenting out the first LWin & LAlt Up:: ;or the second line LWin Up:: msgbox, % A_ThisHotkey return 但输出取决于按键和释放的顺序。释放第一个键和第二个键之间的时间也会影响结果。有时我会收到两个消息框,有时只有一个,有时
LWin-Up
和LWin+LAlt-Up
。我试着这样做:
LAlt & LWin Up:: ;I've also tried commenting out the first
LWin & LAlt Up:: ;or the second line
LWin Up::
msgbox, % A_ThisHotkey
return
但输出取决于按键和释放的顺序。释放第一个键和第二个键之间的时间也会影响结果。有时我会收到两个消息框,有时只有一个,有时甚至一个都没有(第一行被注释掉,按alt,按win,释放win,释放alt)。我如何让它工作?要明确的是:我只想得到一个MessageBox
在回答中,如果能看到一个脚本,提供有关按下热键的完整信息以及按下和释放热键的顺序,那就太好了*释放热键+键组合后,只能触发一个热键。您不能将它们放在一起。
您应该使用如下内容:
altPressed := false
LAlt & LWin Up::
msgbox, % A_ThisHotkey
return
LWin & LAlt Up::
msgbox, % A_ThisHotkey
altPressed := true
return
LWin Up::
if !altPressed {
msgbox, % A_ThisHotkey
}
altPressed := false
return
如果您想做的事情而不是msgbox
在我的代码中过于分散,您可以使用以下方法:
SetTimer, toDo, 10
toDo:
if doWhatEver {
;; HERE DESCRIBE WHAT TO DO
doWhatEver := false
}
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
altPressed := false
doWhatEver := false
LAlt & LWin Up::
doWhatEver := true
return
LWin & LAlt Up::
doWhatEver := true
altPressed := true
return
LWin Up::
if !altPressed {
doWhatEver := true
}
altPressed := false
return
TechJS的答案并没有完全按照我希望的那样工作,所以这是我的脚本。它检测按键的按下和释放顺序,不取决于按键之间的时间
global firstPressed := ""
LAlt::
altDown := true
if (winDown)
return
firstPressed := "!"
return
LWin::
winDown := true
if (altDown)
return
firstPressed := "#"
return
LAlt Up::
altDown := false
if (!winDown) {
if (comboJustUp) {
comboJustUp := false
return
}
msgbox !
}
if (winDown) {
comboJustUp := true
if (firstPressed = "#")
msgbox #!!.
if (firstPressed = "!")
msgbox !#!.
}
return
LWin Up::
winDown := false
if (!altDown) {
if (comboJustUp) {
comboJustUp := false
return
}
msgbox #
}
if (altDown) {
comboJustUp := true
if (firstPressed = "!") ; \here is one bug though. If you switch theese
msgbox !##. ; /two lines
if (firstPressed = "#") ; \with theese
msgbox #!#. ; /two. It won't work correctly for some reason
}
return
这不管用,但我有主意了。谢谢你的回答。@user2277240它有效。有一个小问题,当你按下
alt+Win
时,因为你先释放Win,然后再释放alt,它会调用altPressed:=true
导致Lwin Up
在第一次按下时不会运行。第二次按它时,它会工作(我的意思是单独按LWin键)。