AutoHotKey - 创建状态相关的热键
AutoHotKey - Creating state dependent hotkeys
是否可以使用 AutoHotKey 创建状态相关的热键?我知道在使用 #IfWinActive 时可以在依赖状态下创建某些热键,但是如何在热键内部创建热键呢?
例子
F1::
Gui, Show, center center h500 w500, Just a window
return
F2::
MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
return
return
这里的问题是F2不依赖于状态,一按就会触发。
可能的解决方案
F1::
state := true
Gui, Show, center center h500 w500, Just a window
return
#If (state = true)
{
F2::
MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
return
}
GUIclose:
Gui, destroy
state := false
return
return
这是一个可行的解决方案,效果很好。但是,有没有比这样做更简单的解决方案?
不完全是 "easier",但我觉得更好看,也是我喜欢的方式:
F1::
Hotkey, F2, F2_action, ON
Gui, Show, center center h500 w500, Just a window
return
F2_action: ; this is a label not a hotkey
MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
return
GUIclose:
Gui, destroy
Hotkey, F2, F2_action, OFF
return
我在这里使用了hotkey命令,它是专门为
设计的
but how about creating hotkeys inside a hotkey itself
我会在 #If
中添加 2 个条件
F1::
state := true
Gui, Show, center center h500 w500, Just a window
Return
#If state and WinActive("Just a window")
F2::MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
#If
不确定这是否是您在说尝试过时已经排除的问题 #IfWinActive
是否可以使用 AutoHotKey 创建状态相关的热键?我知道在使用 #IfWinActive 时可以在依赖状态下创建某些热键,但是如何在热键内部创建热键呢?
例子
F1::
Gui, Show, center center h500 w500, Just a window
return
F2::
MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
return
return
这里的问题是F2不依赖于状态,一按就会触发。
可能的解决方案
F1::
state := true
Gui, Show, center center h500 w500, Just a window
return
#If (state = true)
{
F2::
MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
return
}
GUIclose:
Gui, destroy
state := false
return
return
这是一个可行的解决方案,效果很好。但是,有没有比这样做更简单的解决方案?
不完全是 "easier",但我觉得更好看,也是我喜欢的方式:
F1::
Hotkey, F2, F2_action, ON
Gui, Show, center center h500 w500, Just a window
return
F2_action: ; this is a label not a hotkey
MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
return
GUIclose:
Gui, destroy
Hotkey, F2, F2_action, OFF
return
我在这里使用了hotkey命令,它是专门为
设计的but how about creating hotkeys inside a hotkey itself
我会在 #If
F1::
state := true
Gui, Show, center center h500 w500, Just a window
Return
#If state and WinActive("Just a window")
F2::MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
#If
不确定这是否是您在说尝试过时已经排除的问题 #IfWinActive