Работа с OLE-приложениями в Delphi XE4: получение названия отображаемого приложения
Вопрос, который стоит перед разработчиками, использующими Delphi XE4 для создания Win32 приложений, заключается в необходимости получения названия отображаемого OLE-приложения. Это может быть полезно, например, для отображения названия программы в интерфейсе пользователя или для логирования действий пользователя.
Обычно для работы с OLE-объектами используется класс TOleContainer, который может содержать различные OLE-приложения, такие как Microsoft Word, Microsoft Excel и другие, в зависимости от типа обрабатываемого файла. Задача состоит в том, чтобы получить название приложения, как оно отображается в заголовке окна, например, "Microsoft Word 2010".
Решение проблемы
Для получения названия OLE-приложения можно использовать метод IOleObject.GetUserType. Вот пример функции, которая возвращает название приложения:
function GetOleObjectAppName(const OleObject: IOleObject): string;
var
AppName: PWideChar;
begin
OleCheck(OleObject.GetUserType(USERCLASSTYPE_APPNAME, AppName));
try
Result := AppName;
finally
CoTaskMemFree(AppName);
end;
end;
Метод GetUserType возвращает название приложения, основываясь на текущем формате файла. Например, для файла Excel97-2003, даже если установлена Microsoft Office 2007, будет возвращено название "Microsoft Excel 2003". Возможно, потребуется дополнительная логика для получения названия актуального обработчика.
Использование try..finally в примере кода корректно. Если OleCheck вызывает исключение, выделение памяти для AppName не происходит, следовательно, освобождение памяти также не требуется.
Альтернативный подход
В качестве альтернативного подхода можно использовать метод IOleObject.GetUserClassID, а затем попытаться найти название приложения в реестре, используя AppID. Это может потребовать дополнительной работы с реестром и может быть не так просто в реализации, как использование GetUserType.
Заключение
Получение названия OLE-приложения в Delphi XE4 возможно с использованием стандартных методов COM-интерфейсов. Важно правильно обработать результаты работы с неопределенным поведением (OleAutomation) и корректно освободить выделенные ресурсы, даже в случае возникновения исключений.
Вопрос заключается в том, как получить название отображаемого OLE-приложения в Delphi XE4 для использования в Win32 приложениях.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS