如何解决自动化:应用程序触发器以执行另一个应用程序
我认为一些背景知识应该有助于更好地了解我的处境。当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
}
}
此代码有效,但现在我需要一种方法来存储进程名称并检查该列表中的每个名称,以使代码变得灵活且可重用。
基本上我正在寻找:
- 检查游戏exe是否已执行并在列表中,
- 如果是,请运行gamingprofile.bat
- 游戏退出时,
- 运行removegamingprofile.bat
重复冲洗(返回1)
理想情况下,如果将遵循此模式的所有exe文件放置在各种数组中,并且代码变得更加灵活,那将是很好的选择。
解决方法
我的解决方案简要说明:
我创建了一个数组,在其中放置了要触发执行的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
}
}
}
}
注意:如果您计划将程序实例用于许多其他可能的情况,则可以将检查程序实例的“一秒钟”时间从Process,1
减少到小数位数,例如Process,.01
触发程序,但是当我以0.01秒的延迟对其进行测试时,我注意到我的计算机运行得稍慢一些。您可能可以对其进行微调,以针对特定计算机进行优化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。