Автоматизация: запуск приложения для выполнения другого приложения

#automation #scripting #autohotkey

#автоматизация #сценарии #автоотключение

Вопрос:

Я полагаю, что некоторая предыстория должна помочь лучше понять мою ситуацию. Я полагался на профилировщик Intel Control Panel для переключения графических профилей, когда game.exe убежал бы. У него была опция запуска приложения, которая автоматически определяла exe-файл при добавлении в его список бывших и активировала графический профиль. Он также автоматически вернется к предыдущему профилю, когда game.exe возбужденный. После недавнего обновления драйвера функция запуска приложения перестала работать. В качестве альтернативы я настраиваю два bat-файла, которые используют аргументы командной строки для панели управления exe для запуска профилей вручную. Я хотел автоматизировать этот процесс, и я добился некоторого прогресса в AHK, но что-то не так. Я также открыт для использования чего-то еще, кроме AHK, если он делает то, что должен. Я просто подумал, что AHK — хорошее начало для таких вещей. До сих пор у меня:

 #Persistent

Profile1:
Process, Wait, notepad.exe
{
    Run C:ProfileChange.bat
    Process, WaitClose, notepad.exe
    {
        Run C:RevertProfile.bat
        Goto Profile1
    }
}
  

Этот код работает, но теперь мне нужен способ сохранить имена процессов и сверить их с каждым именем в этом списке, чтобы код стал гибким и возобновляемым.

В основном я ищу:

  1. Проверьте, выполняется ли игра exe и в списке,
  2. если это так, запустите gamingprofile.bat
  3. При выходе из игры,
  4. запустите removegamingprofile.bat

Повторите промывание (вернитесь к 1)

В идеале было бы здорово, если бы все exes, которые следуют этому шаблону, могли быть размещены в массиве сортировки, и код стал более гибким.

Ответ №1:

Мое решение кратко объяснено:

Я создал массив, в который я поместил имена exes, которые я хочу, чтобы запускали выполнение (для этого примера я использовал notepad и cmd, которые предустановлены на всех компьютерах с Windows. Я каждый раз перебирал массив, проверяя в течение 1 секунды, существует ли экземпляр текущей программы из текущего индекса массива. Если этого не произошло, переходите к следующей программе в массиве. Однако, если эта программа существует, запустите C:ProfileChange.bat ее и дождитесь ее завершения. После завершения работы запустите C:RevertProfile.bat . Если мое объяснение было трудным для понимания, код, вероятно, легче понять.

 #Persistent

exes := ["notepad.exe", "cmd.exe"]
Loop{
for index, element in exes 
{
    Process, Wait, %element%, 1
    NewPID := ErrorLevel
        if not NewPID
    {
        continue
    }
    {
        Run C:ProfileChange.bat
        Process, WaitClose, %element%
        {
            Run C:RevertProfile.bat
        }
    }
}
}
  

Примечание: вы, вероятно, можете уменьшить время в одну секунду для проверки экземпляра программы с десятичной Process, Wait, %element%, 1 до десятичной, например, Process, Wait, %element%, .01 если вы планируете использовать его для множества различных возможных программ запуска, но когда я тестировал его с задержкой 0,01 секунды, я заметил, что мой компьютер работает немногозадержка. Вероятно, вы можете настроить его на своем конце, чтобы оптимизировать его для вашего конкретного компьютера.