Automation 自动化:执行另一个应用程序的应用程序触发器

Automation 自动化:执行另一个应用程序的应用程序触发器,automation,scripting,autohotkey,Automation,Scripting,Autohotkey,我想一些背景故事应该有助于更好地了解我的情况。当game.exe运行时,我依靠Intel Control Panel的profiler切换图形配置文件。它有一个应用程序触发选项,当添加到exe列表时,会自动检测exe,并激活图形配置文件。当game.exe退出时,它也会自动恢复到以前的配置文件。在最近的驱动程序更新之后,应用程序触发器功能停止工作。作为替代方案,我设置了两个bat文件,它们使用控制面板exe的命令行参数手动触发配置文件。我一直在寻找自动化这个过程,我已经在AHK取得了一些进展,但

我想一些背景故事应该有助于更好地了解我的情况。当game.exe运行时,我依靠Intel Control Panel的profiler切换图形配置文件。它有一个应用程序触发选项,当添加到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)


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

    我的解决方案简要说明:

    我创建了一个数组,其中放置了我希望触发执行的前男友的名字(在本例中,我使用了所有Windows计算机上预装的记事本和cmd。每次我都在数组中循环,在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
            }
        }
    }
    }
    

    注意:如果您打算将程序实例的检查时间从
    进程,等待,%element%,1
    减少到小数点,例如
    进程,等待,%element%,.01
    ,您可以将检查程序实例的时间减少1秒,但当我以.01秒的延迟测试它时,我注意到我的计算机er运行得有点慢。您可能可以对其进行微调,以找到适合您特定计算机的优化方法。

    我的解决方案简要说明:

    我创建了一个数组,其中放置了我希望触发执行的前男友的名字(在本例中,我使用了所有Windows计算机上预装的记事本和cmd。每次我都在数组中循环,在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
            }
        }
    }
    }
    
    注意:如果您打算将程序实例的检查时间从
    进程,等待,%element%,1
    减少到小数点,例如
    进程,等待,%element%,.01
    ,您可以将检查程序实例的时间减少1秒,但当我以.01秒的延迟测试它时,我注意到我的计算机er运行得有点慢。您可能可以在您的端对其进行微调,以找到适合您特定计算机的优化方法