Есть разные ответы, основанные на многих следующих факторах:
- это третье лицо или ваше собственное
приложение?
- имеет ли он интерфейс автоматизации
- GUI инструментарий, используемый в приложении
Если это стороннее приложение, то вам нужно работать на уровне Windows API через PInvoke - создание подкласса WinMain proc, захват и отправка входных сообщений и т. Д. Для этой задачи есть сторонняя библиотека. C #, очевидно, не является правильным выбором для такой задачи.
Если приложение имеет модель автоматизации (например, Excel), написать программу, которая будет взаимодействовать с этим приложением, довольно просто.
Если это ваше собственное приложение, которое вы хотите расширить с помощью функциональности макросов, то вы должны принять это во внимание на этапе разработки. Если вы используете шаблон Command с самого начала, то нетрудно запрограммировать запись макросов.
Вы должны предоставить более подробную информацию, чтобы получить лучший ответ.
О, я почти забыл ответить на эти три вопроса
- Это лучший способ сделать это?
Зависит от конкретного сценария
- Как получить дескриптор приложения, которое уже запущено?
Зависит от приложения. Если это родное приложение Win, вы можете легко получить идентификатор процесса и дескриптор окна через WinApi.
- Как отправить пользовательские сообщения в приложение, которое уже запущено?
Еще раз это зависит от типа приложения. Для родных выигрышных приложений вы можете легко отправлять сообщения WM_XXX через WinAPI