半自动化看这边:【脚本相关】使用脚本来半自动化保存预设
前面代码部分一样,后半部分用AutoHotKey模拟点击Ctrl+V以及Alt+S保存,实现自动化保存流程。
不过有瑕疵,像选中效果控件里面的插件,还需要用户手动操作,目前还做不到完全的全自动化。不过也没差了,我们可以在脚本设定好预设保存文件夹、文件名,至于预设什么内容由用户选择也没什么不好2333
因为双方编码不一致,导致传递过去的中文会乱码,所以我这边提供两个方法:一个只允许英文;另一个是把中文参数保存在确定位置的文本文件里,然后用AutoHotKey去解析该文本文件获得内容,并拷贝到剪贴板。
myPreset.jsx
var comp = app.project.activeItem; // 获取合成
var layer = comp.selectedLayers; // 获取选中图层
var effect = layer[0].property("ADBE Effect Parade"); // 获取图层的效果列表
var num = effect.numProperties; // 获取效果列表的数量
var plug = effect.property(1); // 序号可以用for遍历,或者用name、matchName查找
// 用名称或者元属性名的时候,如果没找到返回null
var isSeleEffect = plug.selected; //检测是否在效果控件选中插件
var presetPath = Folder.temp.fsName + "ae_ffxpath.ffx";
// 声明一个ffx文件的保存全路径,Folder.temp是系统缓存文件夹
copyToClipboard(presetPath); // 把内容推送到系统的剪贴板,如果不用可以注释掉
// https://www.yuelili.com/ae-script-case-transferring-information-to-the-system-clipboard/
function str2cmd(str, list) {
var cmd = str;
for (i = 0, ii = list.length; i < ii; i++) {
var tmp = '"' + list[i] + '"';
// var tmp = list[i];
cmd = cmd.toString().replace("${" + (i + 1) + "}", tmp);
}
return cmd;
}
var list = ["(pwcode)\\AutoHotkey","AutoHotkeyU64.exe","autoSavePreset.ahk"];
var cmd = str2cmd('cmd /c start "" /d ${1} ${2} ${3}', list);
system.callSystem(cmd); // 启动AutoHotKey待命
app.executeCommand(3075); // 模拟点击 菜单栏的保存预设功能
其中的list是一个占位数组,对应 ${Number},Number从1开始。str2cmd函数原理是替换占位符,再也不用手动用+"’来连接变量。
system.callSystem一定要放在app.executeCommand前面,打开的AutoHotKey可以在后台等待触发条件,一旦保存预设文件窗口弹出,立马模拟点击Ctrl+V以及Alt+S,自动化操作。
如果你的可执行文件放到子文件夹里或者其他位置,那么用/d path指定程序所在的path文件夹就会方便很多,这样你只需要输入程序名即可,打开程序时自动在当前位置寻找程序运行。如果程序在脚本同目录 /d path 可以删掉。
下面是总结出来的cmd字符串指令内容,start 后面必须跟随一个空的双引号,这是因为start会把第一个双引号当成打开新窗口的标题,如果没有/d /min等start参数隔断,会把加了双引号的可执行程序当成标题。
var cmd = 'cmd /c start "" "program.exe" "parameter"'
program.exe 可执行文件,在这边是AutoHotKey.exe
parameter yao 要传递给可执行文件的参数,这边是一个ahk脚本文件
这行代码的作用是用ahk程序运行ahk脚本文件,在任务栏能看到一个绿绿的H图标就是了,右键可以选择暂停或者编辑脚本文件后需要手动reload导入。
有关start和system.callSystem详细介绍可以移步另一个帖子观看:【脚本相关】关于system.callSystem()踩坑记录与解决方法探索
接下来介绍ahk脚本文件,我已经在代码块里解释清楚了,也没啥可补充的了,另外软件有安装版和解压即用的便携版。
如果是便携版的,需要你把ahk文件打开方式选择成AutoHotKey程序,或者是把文件拽托到exe直接运行,单纯双击exe是没反应的。有几个exe,选择u64就行。
autoSavePreset.ahk
clipboard := "" ; 清空剪贴板
ClipWait ; 等待剪贴板重新拷贝新内容
; clipboard := A_Temp "\ae_ffxpath.ffx"
; A_Temp 是系统缓存文件夹,需要注意ahk无需用+来连接字符串
; 如果不用剪贴板传递数据,想用确定的文件路径
; 可以用分号把前面的剪贴板代码注释掉
; 至于用AutoHotKey读取文本文件,等有空再来研究 = =
; MsgBox % clipboard
; 英文版AE用这个英文关键词,中文用中文关键词
WinWait Save Animation Preset
; WinWait 动画预设另存为
WinActivate
; 模拟 Ctrl+V 和 Alt+S
Send ^v
Send !s
return
另外再补充一点,AutoHotKey目录有几个ahk脚本文件,其中 WindowSpy.ahk 非常有用,它可以查看任意窗口的详细信息,我的保存预设窗口的标题就是从 WinSpy 嗅探到的,直接从 WinSpy界面复制字符串。