【问题标题】:Get the running AutoCAD application using comtypes in python 2.7在 python 2.7 中使用 comtypes 获取正在运行的 AutoCAD 应用程序
【发布时间】:2019-02-06 05:40:04
【问题描述】:

我正在尝试获取一个实例以指向已运行的 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.S GetActiveObject 与其他应用程序(例如 ETABS 2016 和 SAP2000 v18)配合得很好

任何帮助和有见地的回复将不胜感激,在此先感谢

【问题讨论】:

  • > GetActiveObject 抛出
  • @Maxence 是的,我刚刚删除了指向acad = GetActiveObject("AutoCAD.Application.20") 行的第一部分,换句话说,问题很可能在于comtypes 本身的编码。

标签: python python-2.7 com autocad comtypes


【解决方案1】:

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

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

  1. AutoCAD.py
  2. AutoCAD.pyc
  3. _4E3F492A_FB57_4439_9BF0_1567ED84A3A9_0_1_0.py
  4. _4E3F492A_FB57_4439_9BF0_1567ED84A3A9_0_1_0.pyc

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

【讨论】:

    猜你喜欢
    • 2019-07-16
    • 2019-03-25
    • 1970-01-01
    • 2012-07-11
    • 2013-08-24
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多