Communicating with After Effects Using Named Pipes?
这是一个引人入胜的实现。您可能建议使用 HTTP 或 Adobe 的官方 ExtendScript 调试器,但该调试器需要 Node.js 环境。插件呢?插件当然可以工作,但它们必须位于 AE 的插件目录中才能加载 — 这是一个不方便的约束。那么,有没有一种方法可以直接与 AE 通信,而不受官方调试器或插件目录限制,类似于 DLL 注入呢?绝对!
我最近开源了一个项目,正是为了实现这一点 https://github.com/zHaOdANiuu/ESTKPipeServer
实现概述
After Effects 脚本可以通过 ExternalObject 加载 DLL(请参阅 Adobe 的文档)。加载时,DLL 会调用预定义的回调 ESInitialize(也已记录)。这是我的方法:
注入 DLL:使用 ExternalObject 加载我的自定义 DLL。
启动命名管道服务器:DLL 启动本地命名管道服务。
访问 AE 的核心套件:初始化之前,DLL 从 U.dll(在 AE 的安装目录中)调用 U_SP_GetSPBasicSuite。对于插件开发人员来说,此方法很熟悉 — 它检索 SPBasic Suite 的 pica 指针。
执行脚本:使用此指针,DLL 直接通过管道执行脚本。
原理
通过利用 ExternalObject 进行 DLL 注入并访问 AE 的内部套件指针,脚本可以通过命名管道执行,从而绕过传统的插件/调试器限制。简单而有效!
就这样!
关键技术说明:
DLL 注入:通过 AE 的原生 ExternalObject 实现。
命名管道:启用无外部依赖关系的进程间通信。
SPBasic Suite:通过 U_SP_GetSPBasicSuite 访问的核心 AE 脚本接口。
pica 指针:AE 脚本环境的句柄,支持直接控制。
零安装:不需要 AE 目录中的插件或Node.js设置。
这种方法提供对 AE 的原始脚本访问,非常适合自动化工具、调试器或自定义集成。
