【问题标题】:Automation: Application trigger to execute another application自动化:应用程序触发器执行另一个应用程序
【发布时间】:2021-02-13 14:24:05
【问题描述】:

我想一些背景故事应该有助于更好地了解我的情况。当 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 都可以放在一个排序数组中,并且代码变得更加灵活,那就太好了。

【问题讨论】:

    标签: automation scripting autohotkey


    【解决方案1】:

    我的解决方案简要说明:

    我创建了一个数组,在其中放置了我想要触发执行的 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 秒的延迟对其进行测试时,我注意到我的计算机运行速度有点慢。您可能可以最终对其进行微调,以找到针对您的特定计算机进行优化的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 2015-06-15
      相关资源
      最近更新 更多