Доступ к COM-интерфейсу приложения с помощью C ++ или C
Вопрос
В ответ на вопрос, как я могу (или найти дополнительную информацию для) автоматизировать определенный функциональность без вмешательства пользователя, с C++ (или C) с использованием:
- ATL
- Или код автоматизации непосредственно на C / C ++
С уважением
Решение
Если приложение предоставляет библиотеку типов (а приложения Microsoft Office предоставляют), то вы можете получить доступ к ней из Microsoft C ++, используя ключевое слово #import .Это создаст оболочки C ++ для COM-интерфейсов, предоставляемых приложением.
Библиотеки типов часто представляют собой файлы .TLB, но они регулярно внедряются как ресурсы Win32 в исполняемые файлы.
Чтобы узнать, предоставляет ли приложение свою функциональность таким образом, вам, вероятно, потребуется обратиться к документации для конкретного приложения, поскольку обнаружение (и понимание) библиотек типов довольно сложно.
Пакет SDK для Windows включает инструмент "OLE / COM Viewer", который может отображать информацию библиотеки типов для COM-объекта в реестре или из файла или ресурса .TLB.
Если вы хотите поиграть с приложением, VBScript (или JScript) предоставит вам быстрый способ поэкспериментировать.Они оба способны использовать интерфейсы OLE Automation.
Другие советы
Под автоматизацией вы подразумеваете возможность иметь скрипт, который запускает приложение, взаимодействует с ним и выполняет некоторые функции.Что-то вроде автоматизированного тестового сценария или что-то в этом роде.
Для этого самый простой способ (если приложение уже существует, например Word, Excel, Visual Studio и т.д.) - Написать скрипт на языке, поддерживающем DCOM (например, Ruby с его библиотекой WIN32OLE), и использовать его для вызова приложения.
Если вы разрабатываете приложение, то это становится сложнее, вы, вероятно, могли бы встроить существующий язык сценариев в свой исполняемый файл и предоставить способ взаимодействия с ним.Возможно, у вас есть опция командной строки для автоматического запуска скрипта в контексте вашего приложения.Или, если вы хотите проделать какую-то серьезную работу по разработке, вы могли бы попробовать добавить в DCOM (я этого не пробовал, поэтому не знаю, сколько потребуется работы).