automation - 自动化:应用程序触发器执行另一个应用程序
问题描述
我想一些背景故事应该有助于更好地了解我的情况。当 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 的名称(在这个例子中,我使用了记事本和 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 秒的时间对其进行测试时延迟,我注意到我的电脑运行有点慢。您可能可以最终对其进行微调,以找到针对您的特定计算机进行优化的方法。
推荐阅读
- asterisk - AGI 应该如何处理 HangupRequest
- css - 如何使用 CSS 变换以正确的视角将两个或多个立方体彼此相邻放置?
- perl - Perl Excel::Writer:使用变音符号创建 Excel
- java - 使用 angular5 和 java 按日期搜索数据
- bash - 如何比较两个不同格式的日期?
- javascript - NextJS 和 highcharts-react-official 的气泡图
- java - 在java中使用sikuli为firefox设置代理
- microsoft-graph-api - 允许在 1 个查询中仅查找特定组的用户成员
- ruby-on-rails - 如何在 Rails 中为自定义 db rake 任务动态设置 schema_format?
- android - Android Google Services 4.2.0 下载失败