我想在我的脚本中有两个热键。即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
但输出取决于按下和释放按键的顺序。释放第一个和第二个键之间的时间也会影响结果。有时我得到两个MessageBoxes,有时只有一个,有时甚至根本没有(第一行被注释掉,按alt,按下win,释放win,释放alt)。我如何使其工作?要明确:我只想获得一个MessageBox。
在答案中,很高兴看到一个脚本提供有关按下的热键的完整信息以及按下和释放按键的顺序。 *释放a hotkey+key
组合后,只能触发一个热键。
答案 0 :(得分:2)
你不能完全放弃它们 你应该使用这样的东西:
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
答案 1 :(得分:0)
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