如何从win32com.client.dispatch("Shell.Application")获取属性

6 投票
1 回答
11657 浏览
提问于 2025-04-17 12:02

我正在尝试通过Python来控制我的设备管理器程序(也就是禁用和重新启用设备)。不过,我在弄清楚“win32com.client.Dispatch("Shell.Application")”这个命名空间里的属性时遇到了困难。我只知道怎么获取名称并打印出来。我调试了一下代码,但没找到什么有用的信息。

这是我目前的进展:

    import win32com.client
    shell = win32com.client.Dispatch("Shell.Application")
    control_panel = shell.Namespace(3)
    for item in control_panel.Items():
        if item.Name == "Device Manager":
            print item
            break

这也没什么用:

 control_panel.GetNamespace("MAPI")
 Traceback (most recent call last):
   File "<interactive input>", line 1, in <module>
   File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
 AttributeError: <unknown>.GetNamespace

1 个回答

9

检查COM对象属性的一种方法是使用你在python的site-packages文件夹中的win32com\client里的combrowse.py脚本。

你只需运行这个脚本(可以双击或者在命令行/python中运行),然后会弹出一个窗口,里面列出了所有可用的COM对象。在Registered Type Libraries下,你应该能找到对应的库,里面有Microsoft Shell Controls And Automation下的Shell。
你可以用下面的命令在python中检查这个:

from win32com.client import gencache
shell = gencache.EnsureDispatch('Shell.Application')
print shell

另外,使用gencache方法时,你可以按Tab键查看一些可用的方法,但如果想要更全面的列表,还是查看combrowse.py比较好。唯一的问题是,combrowse.py中列出的一些方法在python中并不一定真的可用。

撰写回答