2012-08-20 3 views
0

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

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

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

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

Что я должен поставить в этой области, что говорит «Excel.Application»?

Как это найти?

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

Я сделал несколько попыток самостоятельно, но почти не получил результата. Лучший результат, который я получил, - это когда я ввел CLSID в диспетчерскую функцию, которую я нашел в созданном объекте-контейнере.

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, но все дали ошибку и не регистрировало (я подозреваю, не является правильным, мне нужно зарегистрировать)

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

ответ

2

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

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

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

+0

Спасибо за этот шаг! Просто знай это. – swdev

1

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^