Найти - Пользователи
Полная версия: Подключение приложений через win32com.client.Dispatch. Как отключить автоматическую загрузку?
Начало » Python для новичков » Подключение приложений через win32com.client.Dispatch. Как отключить автоматическую загрузку?
1
Markoh
Прошу помощи. Как отключить автоматическую загрузку приложения при подключении к его com модели? То есть подключаться только если приложение открыто пользователем. В коде ниже поведение автокада и экселя разное, хотя код идентичный. Если эксель не запущен, то срабатывает условие инициализирующее ошибку, а если Автокад не запущен, то он сам запускается и условие не срабатывает. Почему?

import win32com.client

appAutocad = win32com.client.Dispatch(“AutoCAD.Application”)
appExcel = win32com.client.Dispatch(“Excel.Application”)

wb = appExcel.ActiveWorkbook
aDoc = appAutocad.ActiveDocument

if wb == None: err = int('Инициализирую ошибку')
if aDoc == None: err = int('Инициализирую ошибку')

PEHDOM
Markoh, А с чего вы взяли что когда вы делаете appExcel = win32com.client.Dispatch(“Excel.Application”) оно ексель не запускает? можете посмотреть в диспетчере задач и убедиться что это не так. Просто пока вы не сделаете appExcel.Workbooks.Open(…) appExcel.ActiveWorkbook будет равно None
При отсутвии автокада, предположу что автокад всего навсего сразу создает пустой NewDocument, а не ждет пока ктото чтото откроет, поэтому appAutocad.ActiveDocument и возвращает обьект, а не None.
Хотите проверять если приложение открыто пользователем, так и проверяйте через win32api или psutil, или еще как.
ЗЫ: вызывать исключение таким вот макаром err = int('Инициализирую ошибку') моветон, в пайтон для этого предусмотрена инструкция raise https://docs.python.org/3/tutorial/errors.html#raising-exceptions
Markoh
PEHDOM
PEHDOM, спасибо, что откликнулись. Про моветон - работаю над собой :-). К сути. Эксель реально не загружается, в диспетчере отсутствует. “Хотите проверять если приложение открыто пользователем, так и проверяйте через win32api или psutil”, например так:
appAutocad = win32com.client.GetActiveObject(“AutoCAD.Application”) ?
PEHDOM
del
PEHDOM
Markoh
Эксель реально не загружается, в диспетчере отсутствует.
Хмм не может быть, после того как вы делаете
win32com.client.Dispatch(“Excel.Application”) в диспетчере задач появляется ексель… проверено не один раз.


Markoh
например так:
например так: https://stackoverflow.com/questions/550653/cross-platform-way-to-get-pids-by-process-name-in-python
Markoh
У меня excell(64) из office2010. Не в этом ли дело?. Ну, не суть. Сделал код с win32com.client.GetActiveObject(“AutoCAD.Application”) - все работает как надо. Спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB