2

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

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

在此链接中,作者使用“Celestron.Telescope”作为 win32com.client.Dispatch 实例化的参数。

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

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

谢谢

4

2 回答 2

5

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

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。

我机器上的一些输出:

Powershell 中的命令输出片段

我希望这有帮助!

于 2017-12-01T23:32:16.410 回答
1

这个“Celestron.Telescope”字符串被称为ProgID(你可以很容易地用谷歌搜索这个词)。

它们位于HKEY_LOCAL_MACHINE\SOFTWARE\Classes整个机器的注册表项下和HKEY_CLASSES_ROOT当前正在运行的用户中。

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

于 2017-12-02T06:29:45.560 回答