Skip to main content
Participant
June 9, 2025
Question

Communicating with After Effects Using Named Pipes?

  • June 9, 2025
  • 0 replies
  • 144 views

这是一个引人入胜的实现。您可能建议使用 HTTP 或 Adobe 的官方 ExtendScript 调试器,但该调试器需要 Node.js 环境。插件呢?插件当然可以工作,但它们必须位于 AE 的插件目录中才能加载 — 这是一个不方便的约束。那么,有没有一种方法可以直接与 AE 通信,而不受官方调试器或插件目录限制,类似于 DLL 注入呢?绝对!

我最近开源了一个项目,正是为了实现这一点 https://github.com/zHaOdANiuu/ESTKPipeServer

实现概述

After Effects 脚本可以通过 ExternalObject 加载 DLL(请参阅 Adobe 的文档)。加载时,DLL 会调用预定义的回调 ESInitialize(也已记录)。这是我的方法:

  1. 注入 DLL:使用 ExternalObject 加载我的自定义 DLL。

  2. 启动命名管道服务器:DLL 启动本地命名管道服务。

  3. 访问 AE 的核心套件:初始化之前,DLL 从 U.dll(在 AE 的安装目录中)调用 U_SP_GetSPBasicSuite。对于插件开发人员来说,此方法很熟悉 — 它检索 SPBasic Suite 的 pica 指针

  4. 执行脚本:使用此指针,DLL 直接通过管道执行脚本。

原理

通过利用 ExternalObject 进行 DLL 注入并访问 AE 的内部套件指针,脚本可以通过命名管道执行,从而绕过传统的插件/调试器限制。简单而有效!

就这样!


关键技术说明:

  • DLL 注入:通过 AE 的原生 ExternalObject 实现。

  • 命名管道:启用无外部依赖关系的进程间通信。

  • SPBasic Suite:通过 U_SP_GetSPBasicSuite 访问的核心 AE 脚本接口。

  • pica 指针:AE 脚本环境的句柄,支持直接控制。

  • 零安装:不需要 AE 目录中的插件或Node.js设置。

这种方法提供对 AE 的原始脚本访问,非常适合自动化工具、调试器或自定义集成。