#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
}
}
Этот код работает, но теперь мне нужен способ сохранить имена процессов и сверить их с каждым именем в этом списке, чтобы код стал гибким и возобновляемым.
В основном я ищу:
- Проверьте, выполняется ли игра exe и в списке,
- если это так, запустите gamingprofile.bat
- При выходе из игры,
- запустите 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 секунды, я заметил, что мой компьютер работает немногозадержка. Вероятно, вы можете настроить его на своем конце, чтобы оптимизировать его для вашего конкретного компьютера.