我玩的是《激战 2》,其中有一个功能可以显示可交互物品的名称,但必须按住该键。我将其设为一个切换按钮,但我希望它在窗口之间来回切换后也能正常工作。
在游戏中将功能重新绑定到 F3 后,切换按键似乎就像这个脚本一样简单:
#IfWinActive Guild Wars 2
LAlt::
if (GetKeyState("F3")) {
Send, {F3 up}
} else {
Send, {F3 down}
}
#IfWinActive
但是,当窗口失去焦点时,我假设键被按住,因为当它重新获得焦点时,我需要按两次切换按钮才能再次开始显示我想要的内容。
理想情况下,我希望有一种方法,当窗口失去焦点时释放按键,当窗口重新获得焦点时再次按下按键。我该如何实现呢?
答案1
您可以在单独的循环中轮询 WinActive 状态,然后在活动窗口发生变化时采取行动。或者,您仍然可以使用单独的循环,但使用 WinWaitNotActive 和 WinWaitActive 根据需要采取行动。换句话说,您检查哪个窗口处于活动状态(获取当前活动的窗口),然后等待它不活动后再执行其他任何操作。一旦它不活动,您再次检查活动窗口,如果它是正确的窗口,则执行适当的操作,然后返回等待该窗口不再活动。
为了仅在启用 F3 时激活单独的循环,您可以使用 SetTimer 来启用/禁用单独例程的重复执行,或者仅使用重复检查的共享变量,其中共享变量状态会在您在发布的代码中向上或向下发送 F3 时同时改变状态。