Автоматизация Python ActiveX

Я пытаюсь использовать автоматизацию ActiveX с python для управления Audio Precision ATS-2. Я использую pywin32 32-битную Windows XP с Python 2.7.

Я установил программное обеспечение Audio Precision. Затем я воспользовался утилитой makepy, которая нашла Audio Precision в списке и создала для нее оболочку. Все идет хорошо, пока я не попытаюсь вызвать функцию диспетчеризации, но я застрял.

из руководств, которые я нашел в Интернете,

win32com.client.Dispatch("Excel.Application")

Что я должен указать в области с надписью «Excel.Application»?

Как я могу найти это?

Когда я использовал средство просмотра объектов OLE/COM, я вижу записи Audio Precision в библиотеке типов, но я не уверен, как эта информация может мне помочь.

Я пробовал несколько вещей самостоятельно, но не получил почти никакого результата. Лучший результат, который я получил, был, когда я ввел 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)

У меня есть:

  • заглянул в реестр, а ИД действительно нигде не прописан. Есть несколько записей Audio Precision, но не похоже, что в них есть что-то, что могло бы это исправить.
  • пробовал переустановить программу Audio Precision, не помогло.
  • попытался зарегистрировать объекты dll в программном обеспечении управления Audio Precision (ATS 1.60) с помощью regsrv32, но все выдавали ошибки и не регистрировались (которые, как я подозреваю, не те, которые мне нужно зарегистрировать)

Как я могу это исправить?


person Noteamini    schedule 20.08.2012    source источник


Ответы (3)


Возможный способ решить это:

  • Определите dll Audio Precision ATS-2, которую вы хотите вызвать. Например. "C:\путь\my.dll"
  • Теперь перейдите в реестр и найдите «C:\path\my.dll». Вы найдете несколько вещей, но вам действительно нужна запись в папке CLSID...\InprocServer32 или что-то подобное
  • Также будет запись ProgID, что-то вроде «AudioPrecison.ATS2».
  • Теперь в Python попробуйте win32com.client.Dispatch("AudioPrecison.ATS2")
person NotAUser    schedule 20.09.2012

Чтобы использовать модуль pywin32 с классом ActiveX, вам необходимо создать файл-оболочку. Для этого найдите файл makepy.py в папке C:\Python27\Lib\site-packages\win32com\client (или аналогичной папке). Затем запустите его, найдите ИМЯ вашего класса ActiveX и запустите его. Он должен сгенерировать файл-оболочку в папке gen_py C:\Python27\Lib\site-packages\win32com\gen_py с CLSID. Затем вы можете получить к нему доступ, как в примере Excel, и так же, как на других языках.

person Voltage Spike    schedule 08.08.2013
comment
Спасибо за этот шаг! Просто знай это. - person swdev; 31.03.2014

Я была такая же проблема. Я не знал, где это взять, и из того, что я могу понять, это имя CoClass (которое, как я полагаю, является оболочкой для dll), созданное программой makepy (возможно, я ошибаюсь). После того, как я прочитал ответ от @NotAUser, я нашел его, но когда я проверил файл, созданный программой makepy, и правильно перед последним классом (если создано более одного) я нашел следующее:

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

Итак, в том же файле было имя, которое мне нужно было использовать.

person shipof    schedule 22.01.2014