win32com.client.Dispatch Class 标签

win32com.client.Dispatch Class Label

我正在尝试使用 python 连接到 COM 对象。

更具体地说,我正在使用 ASCOM 标准驱动程序连接到 MaxDome II,但不知道如何引用该驱动程序。

在这个 link 中,作者使用 "Celestron.Telescope" 作为 win32com.client.Dispatch 实例化的参数。

我的问题是如何找到这个字符串。我知道这与安装在计算机上的已安装驱动程序有关,但我不知道如何找到具体的字符串。有没有办法使用 win32com.client 来列出 COM 对象?

顺便说一下,在 Windows 7 pro,64 位上运行。

谢谢

我认为直接从 python 获取 COM 对象列表是不可能的,但是您可以 运行 以下代码(实际上 运行 它来自 python) 在 Powershell 中:

Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Where-Object {
   $_.PSChildName -match '^\w+\.\w+$' -and (Test-Path -Path "$($_.PSPath)\CLSID")
} | Select-Object -ExpandProperty PSChildName

这将输出系统中所有有效 COM 对象名称的列表,按字母顺序排序,语法通常为 MainProgram.SubFunction。

我机器上的一些输出:

希望对您有所帮助!

这个 "Celestron.Telescope" 字符串称为 ProgID(您可以很容易地 google 这个术语)。

它们位于整个计算机的 HKEY_LOCAL_MACHINE\SOFTWARE\Classes 注册表项下,当前 运行 用户位于 HKEY_CLASSES_ROOT 中。

当 COM 创建组件的实例时,它将使用当前用户的注册表视图。大多数键都在 HKLM 中,但在 HKCR 中可以有一些本地覆盖。