首页 > 解决方案 > 自动化:应用程序触发器执行另一个应用程序

问题描述

我想一些背景故事应该有助于更好地了解我的情况。当 game.exe 运行时,我依靠英特尔控制面板的分析器来切换图形配置文件。它有一个应用程序触发选项,可以在添加到其 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)

理想情况下,如果所有遵循这种模式的 exe 都可以放在一个排序数组中并且代码变得更加灵活,那就太好了。

标签: automationscriptingautohotkey

解决方案


我的解决方案简要说明:

我创建了一个数组,在其中放置了我想要触发执行的 exe 的名称(在这个例子中,我使用了记事本和 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 秒的时间对其进行测试时延迟,我注意到我的电脑运行有点慢。您可能可以最终对其进行微调,以找到针对您的特定计算机进行优化的方法。


推荐阅读