#python #windows #com #win32com
#python #Windows #com #win32com
Вопрос:
Я пытаюсь автоматизировать действия в Reflection Desktop из python. Я успешно делал это с помощью VBA раньше, например:
Set Session = CreateObject("Reflection Workspace")
Затем это дает мне активный сеанс:
Set Screen = Session.GetObject("Frame").SelectedView.Control.Screen
или это дает мне конкретный сеанс:
Set Screen = Session.tView(iView).Control.Screen
При выполнении этого из python я ожидал, что COM-объект должен быть таким же, и на основе этого руководства Прикрепиться к запущенному экземпляру COM-приложения, которое я должен иметь возможность подключать к запущенному приложению, подобному этому:
system = win32com.client.GetObject('Reflection Workspace')
и хотя это не возвращает никаких ошибок, я также не могу найти никаких полезных атрибутов. Если я вместо этого использую:
system = win32com.client.gencache.EnsureDispatch('EXTRA.System')
Я могу получить активный сеанс, используя:
screen = system.ActiveSession.Screen
и все работает. Если я запущу
win32com.client.combrowse.main()
и посмотрите на запущенные объекты, в списке указано рабочее пространство Reflection, а не EXTRA.System.
Я также использовал
win32com.client.makepy.main()
чтобы создать библиотеку python для отражения рабочей области, и при этом я могу перечислить все доступные свойства и методы объекта, но я не знаю, как использовать эту новую библиотеку для ранней привязки уже активного сеанса приложения.
Итак, мои вопросы на данный момент:
-
Если COM-браузер показывает рабочее пространство Reflection, а не EXTRA.System, почему я могу подключиться к EXTRA.System в качестве запущенного процесса?
-
Почему я могу подключиться к Reflection Workspace, но ни один из атрибутов COM, доступных при использовании VBA, не доступен при использовании python?
-
Может кто-нибудь указать на руководство о том, как на самом деле назначить запущенный COM-процесс объекту, используя библиотеку, созданную makepy () ?
Комментарии:
1. VBA взаимодействует с
IDispatch
интерфейсом. Верно ли это и для Python?
Ответ №1:
В итоге я нашел решение этой проблемы. Похоже, что COM API «EXTRA.System» сохранен для совместимости с устаревшими, а «Рабочее пространство отражения» следует использовать для новой разработки.
Я был уверен, что уже пробовал, но после публикации вопроса я снова попытался использовать GetObject для получения объекта reflection frame, и это сработало. Итак, для всех, кто пытается сделать это на python, вы можете использовать объект приложения, используя:
system = win32com.client.GetObject('Reflection Workspace')
затем получите активное представление:
screen = system.GetObject("Frame").SelectedView.Control.Screen
или получить конкретное представление, где 1 — номер представления:
screen = system.GetObject("Frame").view(1).Control.Screen
После этого методы такие же, как в документации для GetText, PutText и т.д.