我如何对 AHK 中失去/获得焦点的窗口做出反应?

我如何对 AHK 中失去/获得焦点的窗口做出反应?

我玩的是《激战 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 时同时改变状态。

相关内容