Форум сайта python.su
0
Прошу помощи. Как отключить автоматическую загрузку приложения при подключении к его 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('Инициализирую ошибку')
Отредактировано Markoh (Июнь 14, 2021 13:20:46)
Офлайн
294
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
[code python][/code]
Отредактировано PEHDOM (Июнь 14, 2021 14:38:03)
Офлайн
0
PEHDOM
PEHDOM, спасибо, что откликнулись. Про моветон - работаю над собой :-). К сути. Эксель реально не загружается, в диспетчере отсутствует. “Хотите проверять если приложение открыто пользователем, так и проверяйте через win32api или psutil”, например так:
appAutocad = win32com.client.GetActiveObject(“AutoCAD.Application”) ?
Офлайн
294
del
[code python][/code]
Отредактировано PEHDOM (Июнь 14, 2021 21:06:50)
Офлайн
294
MarkohХмм не может быть, после того как вы делаете
Эксель реально не загружается, в диспетчере отсутствует.
Markohнапример так: https://stackoverflow.com/questions/550653/cross-platform-way-to-get-pids-by-process-name-in-python
например так:
[code python][/code]
Отредактировано PEHDOM (Июнь 14, 2021 21:07:06)
Прикреплённый файлы:
test2.png (159,1 KБ)
Офлайн
0
У меня excell(64) из office2010. Не в этом ли дело?. Ну, не суть. Сделал код с win32com.client.GetActiveObject(“AutoCAD.Application”) - все работает как надо. Спасибо.
Офлайн