Я играю в Guild Wars 2, и есть функция, показывающая названия предметов, с которыми можно взаимодействовать, но клавиша должна быть нажата. Я превращаю его в переключатель, но я бы хотел, чтобы он работал даже после переключения между окнами.

После привязки функции к F3 в игре переключение ключа выглядит так же просто, как этот скрипт:

#IfWinActive Guild Wars 2
LAlt::
    if (GetKeyState("F3")) {
        Send, {F3 up}
    } else {
        Send, {F3 down}
    }
#IfWinActive

Однако, когда окно теряет фокус, я предполагаю, что клавиша удерживается нажатой, поскольку, когда оно восстанавливает фокус, мне нужно дважды нажать на переключатель, чтобы оно снова начало показывать то, что я хочу.

В идеале я хочу, чтобы клавиша была отпущена, когда окно теряет фокус, и снова нажимается, когда окно восстанавливает фокус. Как бы я это сделал?

1 ответ1

0

Вы можете опрашивать статус WinActive в отдельном цикле, а затем предпринимать действия в случае изменения активного окна. В качестве альтернативы вы все еще можете использовать отдельный цикл, но используйте WinWaitNotActive и WinWaitActive для выполнения необходимых действий. Другими словами, вы проверяете, какое окно активно (получаете текущее активное окно), а затем ждете, пока оно не будет активным, прежде чем делать что-либо еще. Когда он не активен, вы снова проверяете активное окно, делаете что-то подходящее, если это правильное окно, и затем возвращаетесь к ожиданию, когда это окно больше не будет активным.

Чтобы активировать отдельный цикл только при включенном F3, вы можете использовать SetTimer, чтобы включить / отключить повторное выполнение отдельной подпрограммы, или просто использовать общую переменную, которая проверяется повторно, когда состояние общей переменной изменяет состояние одновременно с отправкой. F3 вверх или вниз в коде вы разместили.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .