Что в этом скрипте заставляет мое окно сворачиваться? - PullRequest
0 голосов
/ 08 июля 2019

Цель этого простого сценария - обнаружить интервал простоя, когда конкретная программа находится в фокусе, а затем отправить простое нажатие клавиши, когда этот интервал простоя прошел. Я запускаю этот скрипт на 4 компьютерах и получаю неожиданные результаты. Некоторые ПК сворачивают окно при запуске скрипта. Другие ПК запускают его как положено. Сценарий идентичен на каждом ПК.

Я вызываю этот сценарий, щелкая правой кнопкой мыши по сценарию (то есть не запускаю его скомпилированную exe-версию). Запуск его от имени администратора, по-видимому, позволяет добиться лучших результатов на некоторых клиентах, для одного это не имеет значения и сводит окно к минимуму.

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

#Persistent
    SetTimer, Timer_check,3000

    Timer_check:
        if WinActive("ahk_exe gta5.exe")
        {
            if (A_TimeIdlePhysical > 31301 && WinActive("ahk_exe gta5.exe")) {
                Gosub, keepActive
                ToolTip, We're currently idle TimeIdle is %A_TimeIdle% and TimeIdlePhysical is %A_TimeIdlePhysical%
                sleep 1000
                ToolTip
            }

            if (A_TimeIdle < 31301) {
                ToolTip
            }
        }
    return

keepActive: ; keep active sub.
    if WinActive("ahk_exe gta5.exe")
    {
        Send, {` down} ; Press the ` key to keep us active. It holds the key for 0.2 seconds.
        Sleep 200
        Send, {` up}
    }
return```

1 Ответ

1 голос
/ 08 июля 2019

Вы пытаетесь отправить акцент / обратную косую черту, которая является escape-символом по умолчанию в AHK ( `).Чтобы исправить это, отправьте другой символ или экранируйте escape-символ, например:

Send, {`` down}
Sleep 200
Send, {`` up}

Без экранирования, он просто посылает клавиши «вниз» и «вверх» .Комбинация WinKey + down минимизирует не максимизированное окно, и это может как-то быть связано с тем, почему вы время от времени минимизируете игровое окно.

https://www.autohotkey.com/docs/commands/_EscapeChar.htm Редактировать: Добавлен скрипт для тестирования

#Persistent
SetTimer, Timer_check, 3000

Timer_check:
If WinActive("ahk_exe gta5.exe") {
    If (A_TimeIdlePhysical > 31301 && WinActive("ahk_exe gta5.exe")) {
        Send , z
        ToolTip, We're currently idle TimeIdle is %A_TimeIdle% and TimeIdlePhysical is %A_TimeIdlePhysical%
        sleep 1000
        ToolTip
    }
    If (A_TimeIdle < 31301)
        ToolTip
}
Return
...