加载中...

Keyboard Maestro 进阶指南:如何像写代码一样调用宏(Macro)

在 Keyboard Maestro (KM) 的世界里,随着自动化逻辑的复杂化,如果你把所有 Action 都堆在一个宏里,那简直是维护噩梦。作为程序员,我们需要“函数化”。

虽然官方的 Execute a Macro 动作非常基础,但通过以下两种方案,我们可以完美实现参数传递与结果返回。


方案一:正统函数式 —— Subroutines (推荐)

KM 10+ 引入的 Subroutine(子程序) 是最接近现代编程语言“函数调用”的实现方式。它支持显式参数定义和返回值。

1. 定义子宏 (The Function)

  • 添加 Trigger:在子宏的触发器列表中选择 Subroutine Trigger
  • 定义形参:在 Trigger 界面点击 + 号,定义变量名(例如 local_Path)。KM 会自动将其设为局部变量。
  • 执行返回:在子宏逻辑结束处,添加 Return to Subroutine 动作,填入你想返回的结果(字符串、变量或计算结果)。
    image

2. 调用子宏 (The Call)

  • 动作选择:在主宏中使用 Execute a Subroutine 动作(注意:不是 Execute a Macro)。
  • 传参:KM 会根据子宏的定义,自动在 UI 上生成对应的输入框。
  • 接收返回:在动作底部的 store return value in variable 下拉框中,指定一个变量来接收结果。
    image

优点:强类型感、参数清晰、原生支持返回值,是模块化开发的首选。


方案二:上下文共享法 —— Instance Variables

如果你需要传递大量结构化数据(如整个 JSON),或者在复杂的异步调用链中传递上下文,利用 Instance 变量 的作用域特性是最灵活的方案。

1. 原理:利用实例作用域

在 KM 中,以 Instance__ 开头的变量在整个“调用链”中是共享的。如果宏 A 调用了宏 B,宏 B 可以直接读写宏 A 创建的 Instance 变量。

2. 实现流程

  • 主宏 (Caller)
    1. Set Variable "Instance__InputData" to "SomeValue"
    2. 执行 Execute a Macro "Your_Sub_Macro"
  • 子宏 (Callee)
    1. 直接使用变量 %Variable%Instance__InputData% 进行逻辑处理。
    2. 处理完成后,修改 Set Variable "Instance__Result" to "Success"
  • 主宏 (Caller)
    1. 在调用动作之后,直接读取 %Variable%Instance__Result%

优点:支持多参数传递(不需要拆分字符串)、支持双向数据同步、对 Execute a Macro 动作完全通用。


总结:该选哪一个?

维度 方案一:Subroutine 方案二:Instance Variables
可读性 极高,像调用 API 一般,依赖命名约定
返回值 原生支持 需手动约定变量名
参数数量 显式定义,数量固定 无限制,随调随用
适用场景 通用工具类函数、逻辑计算 复杂上下文传递、多参数重型任务

程序员建议:优先使用 Subroutine,因为它能让你的宏结构清晰可见;只有当 Subroutine 的参数界面变得过于臃肿,或者需要跨多级异步调用时,再考虑使用 Instance 变量

posted @ 2026-02-28 00:29  水车  阅读(54)  评论(0)    收藏  举报