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键)。