【脚本相关】借助AutoHotKey来实现保存预设自动化操作(有瑕疵)

半自动化看这边:【脚本相关】使用脚本来半自动化保存预设

 

前面代码部分一样,后半部分用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   官网中文文档

 

另外再补充一点,AutoHotKey目录有几个ahk脚本文件,其中 WindowSpy.ahk 非常有用,它可以查看任意窗口的详细信息,我的保存预设窗口的标题就是从 WinSpy 嗅探到的,直接从 WinSpy界面复制字符串。

给TA充电
共{{data.count}}人
人已充电
AE开发脚本开发

【脚本相关】关于callSystem踩坑记录与解决方法探索

2021-12-23 1:41:43

AEAE开发

【AE脚本】- CopyOffset 复制属性偏移量

2021-12-24 23:03:30

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索