Python ActiveX自动化

Python ActiveX自动化,python,com,activex,pywin32,win32com,Python,Com,Activex,Pywin32,Win32com,我正在尝试使用ActiveX automation和python来控制音频精度ATS-2。我正在使用pywin32 32位Windows XP和Python 2.7 我安装了音频精度软件。然后,我使用makepy实用程序在列表中找到音频精度,并为其创建了一个包装器。一切都很顺利,直到我尝试调用调度函数,我被卡住了 从我在网上找到的指南中 win32com.client.Dispatch("Excel.Application") 我应该在显示“Excel.Application”的区域中放置什么

我正在尝试使用ActiveX automation和python来控制音频精度ATS-2。我正在使用pywin32 32位Windows XP和Python 2.7

我安装了音频精度软件。然后,我使用makepy实用程序在列表中找到音频精度,并为其创建了一个包装器。一切都很顺利,直到我尝试调用调度函数,我被卡住了

从我在网上找到的指南中

win32com.client.Dispatch("Excel.Application")
我应该在显示“Excel.Application”的区域中放置什么

我怎么能找到这个

当我使用OLE/COM对象查看器时,我在类型库下看到音频精度条目,但我不确定其中的信息如何帮助我

我自己尝试了几件事,但几乎没有结果。我得到的最好结果是在dispatch函数中输入
CLSID
,这是我在makepy创建的包装器对象中找到的

win32com.client.Dispatch("{80EC6E76-D94F-48EB-8F4C-05BDD7850BF1}")
这给了我以下错误:

    Traceback (most recent call last):
  File "C:\Python27\Lib\site-packages\win32com\gen_py\APtest.py", line 5, in <module>
    xlApp = win32com.client.Dispatch("{80EC6E76-D94F-48EB-8F4C-05BDD7850BF1}")
  File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 108, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
com_error: (-2147221164, 'Class not registered', None, None)
回溯(最近一次呼叫最后一次):
文件“C:\Python27\Lib\site packages\win32com\gen\u py\APtest.py”,第5行,在
xlApp=win32com.client.Dispatch(“{80EC6E76-D94F-48EB-8F4C-05BDD7850BF1}”)
文件“C:\Python27\lib\site packages\win32com\client\\uuuu init\uuuu.py”,第95行,在分派中
调度,用户名=动态。\ GetGoodDispatchAndUserName(调度,用户名,clsctx)
文件“C:\Python27\lib\site packages\win32com\client\dynamic.py”,第108行,位于_GetGoodDispatchAndUserName中
返回(_GetGoodDispatch(IDispatch,clsctx),用户名)
文件“C:\Python27\lib\site packages\win32com\client\dynamic.py”,第85行,在\u GetGoodDispatch中
IDispatch=pythoncom.CoCreateInstance(IDispatch,None,clsctx,pythoncom.IID_IDispatch)
com_错误:(-2147221164,“类未注册”,无,无)
我有:

  • 在注册表下查看,ID确实没有在任何地方注册。几乎没有音频精度条目,但它似乎没有任何东西可以解决这个问题
  • 尝试重新安装Audio Precision软件,但没有帮助
  • 试图用
    regsrv32
    在音频精度控制(ATS 1.60)软件中注册dll对象,但都出现错误,无法注册(我怀疑我需要注册的对象不正确)

如何解决此问题?

解决此问题的可能方法:

  • 确定要调用的音频精度ATS-2 dll。例如“C:\path\my.dll”
  • 现在转到注册表并查找“C:\path\my.dll”。您将在附近找到一些东西,但真正需要的是CLSID…\InprocServer32文件夹中的一个条目,或类似的内容
  • 还有一个ProgID条目,类似于“AudioPrecison.ATS2”
  • 现在,在Python中尝试
    win32com.client.Dispatch(“AudioPrecison.ATS2”)

    • 解决此问题的可能方法:

      • 确定要调用的音频精度ATS-2 dll。例如“C:\path\my.dll”
      • 现在转到注册表并查找“C:\path\my.dll”。您将在附近找到一些东西,但真正需要的是CLSID…\InprocServer32文件夹中的一个条目,或类似的内容
      • 还有一个ProgID条目,类似于“AudioPrecison.ATS2”
      • 现在,在Python中尝试
        win32com.client.Dispatch(“AudioPrecison.ATS2”)

      要将pywin32模块与activex类一起使用,需要生成包装文件。为此,请在C:\Python27\Lib\site packages\win32com\client(或Similar目录)中找到makepy.py文件。然后运行它,找到activex类的名称,然后运行它。它应该在gen\u py文件夹C:\Python27\Lib\site packages\win32com\gen\u py中生成一个包装文件,其中包含CLSID。然后,您可以像excel示例一样访问它,也可以像在其他语言中一样访问它。

      要将pywin32模块与activex类一起使用,您需要生成一个包装文件。为此,请在C:\Python27\Lib\site packages\win32com\client(或Similar目录)中找到makepy.py文件。然后运行它,找到activex类的名称,然后运行它。它应该在gen\u py文件夹C:\Python27\Lib\site packages\win32com\gen\u py中生成一个包装文件,其中包含CLSID。然后,您可以像excel示例一样访问它,也可以像在其他语言中一样访问它。

      我也有同样的问题。我不知道从哪里可以得到它,我可以从中收集到由
      makepy
      程序创建的
      CoClass
      (我相信是dll的包装)的名称(可能我错了)。在我阅读@NotAUser之后,我找到了它,但是当我检查由
      makepy
      程序创建的文件时,就在最后一个类之前(如果创建了多个),我发现了以下内容:

      from win32com.client import CoClassBaseClass
      # This CoClass is known by the name 'ZKFPEngXControl.ZKFPEngX'
      class ZKFPEngX(CoClassBaseClass): # A CoClass
      

      因此,在同一个文件中,有我需要使用的名称。

      我也有同样的问题。我不知道从哪里可以得到它,我可以从中收集到由
      makepy
      程序创建的
      CoClass
      (我相信是dll的包装)的名称(可能我错了)。在我阅读@NotAUser之后,我找到了它,但是当我检查由
      makepy
      程序创建的文件时,就在最后一个类之前(如果创建了多个),我发现了以下内容:

      from win32com.client import CoClassBaseClass
      # This CoClass is known by the name 'ZKFPEngXControl.ZKFPEngX'
      class ZKFPEngX(CoClassBaseClass): # A CoClass
      

      因此,在同一个文件中,有我需要使用的名称。

      感谢这一步!要知道这一点。谢谢你的这一步!要知道这一点。