Я реализовал это в одном из моих приложений.
Я использовал шаблон команды в моей архитектуре. Кнопка записи в приложении устанавливает RecordingFlag.
Пока RecordingFlag имеет значение true, сохраняйте все выполненные команды (сначала прочитайте шаблон команд, чтобы понять это), пока RecordingFlag не станет false (пользователь снова нажмет кнопку записи).
Запуск записанного макроса - это просто итерация сохраненных команд и выполнение их по порядку.