











在 Keyboard Maestro (KM) 的世界里,随着自动化逻辑的复杂化,如果你把所有 Action 都堆在一个宏里,那简直是维护噩梦。作为程序员,我们需要“函数化”。
虽然官方的 Execute a Macro 动作非常基础,但通过以下两种方案,我们可以完美实现参数传递与结果返回。
KM 10+ 引入的 Subroutine(子程序) 是最接近现代编程语言“函数调用”的实现方式。它支持显式参数定义和返回值。
+ 号,定义变量名(例如 local_Path)。KM 会自动将其设为局部变量。
store return value in variable 下拉框中,指定一个变量来接收结果。
优点:强类型感、参数清晰、原生支持返回值,是模块化开发的首选。
如果你需要传递大量结构化数据(如整个 JSON),或者在复杂的异步调用链中传递上下文,利用 Instance 变量 的作用域特性是最灵活的方案。
在 KM 中,以 Instance__ 开头的变量在整个“调用链”中是共享的。如果宏 A 调用了宏 B,宏 B 可以直接读写宏 A 创建的 Instance 变量。
Set Variable "Instance__InputData" to "SomeValue"。Execute a Macro "Your_Sub_Macro"。%Variable%Instance__InputData% 进行逻辑处理。Set Variable "Instance__Result" to "Success"。%Variable%Instance__Result%。优点:支持多参数传递(不需要拆分字符串)、支持双向数据同步、对 Execute a Macro 动作完全通用。
| 维度 | 方案一:Subroutine | 方案二:Instance Variables |
|---|---|---|
| 可读性 | 极高,像调用 API | 一般,依赖命名约定 |
| 返回值 | 原生支持 | 需手动约定变量名 |
| 参数数量 | 显式定义,数量固定 | 无限制,随调随用 |
| 适用场景 | 通用工具类函数、逻辑计算 | 复杂上下文传递、多参数重型任务 |
程序员建议:优先使用 Subroutine,因为它能让你的宏结构清晰可见;只有当 Subroutine 的参数界面变得过于臃肿,或者需要跨多级异步调用时,再考虑使用 Instance 变量。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。