使用python 2.7中的comtypes获取正在运行的AutoCAD应用程序

问题描述 投票:0回答:1

我正在尝试获取一个实例以指向已经运行的AutoCAD 2016应用程序,或者如果它未运行则创建一个新实例。

这是一个简单的代码示例:

#Import needed modules
import os
import comtypes.client
from comtypes import COMError
from comtypes.client import CreateObject, GetModule, GetActiveObject

try:
        acad = GetActiveObject("AutoCAD.Application.20")
        print "AutoCAD is Active"
        print "########"
except(OSError, COMError): #If AutoCAD isn't running, run it
        acad = CreateObject("AutoCAD.Application.20",dynamic=True)
        print "AutoCAD is successfuly Opened"
        print "########"

当AutoCAD未运行时,函数CreateObject成功运行并且仅当dynamic设置为true ..但GetActiveObject抛出Traceback错误

  File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 250, in CreateObject
    return _manage(obj, clsid, interface=interface)
  File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 188, in _manage
    obj = GetBestInterface(obj)
  File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 112, in GetBestInterface
    interface = getattr(mod, itf_name)
AttributeError: 'module' object has no attribute 'IAcadApplication'

我见过this,但没有任何线索。

此外,我已经回到了comtypes的文档,它说

当COM对象已在运行时,GetActiveObject函数成功,并已在COM运行对象表中注册自身。并非所有COM对象都执行此操作。

但这也没有给我任何线索。

P.Sazxswpoi与我一起使用ETABS 2016和SAP2000 v18等其他应用程序

任何帮助和有见地的回应将完全被感谢,提前感谢

python python-2.7 com autocad comtypes
1个回答
0
投票

这很奇怪,但它确实有效(至少对我而言)

我去了GetActiveObject文件夹,它的完整路径是gen,然后查找文件AutoCAD.py,在IDLE中打开它,知道它等效生成的符号(ID),如C:\Python27\Lib\site-packages\comtypes\gen,然后删除这4个文件:

  1. AutoCAD.朋友
  2. AutoCAD.pyc
  3. _4E3F492A_FB57_4439_9bf0_1567Ed84A3A9_0_1_0.朋友
  4. _4E3F492A_FB57_4439_9BF0_1567ED84A3A9_0_1_0.pyc

您可以注意到,最后2个文件由AutoCAD.py文件中提到的相同的等效生成符号命名。

© www.soinside.com 2019 - 2024. All rights reserved.