【问题标题】:PyWin32 using MakePy utility and win32com to get Network StatisticsPyWin32 使用 MakePy 实用程序和 win32com 获取网络统计信息
【发布时间】:2012-04-02 19:01:30
【问题描述】:

这个问题是我previous question的延续。

我正在尝试使用PyWin32 为我的Windows 7 系统获取Network Statistics

我遵循的步骤:

1) 运行COM MakePy utility,然后在类型库下选择network list manager 1.0 type library

2) 上面的过程生成了这个python file

接下来我使用

创建了类 NetworkListManager(CoClassBaseClass) 的对象
import win32com.client as wc
obj = wc.Dispatch("{DCB00C01-570F-4A9B-8D69-199FDBA5723B}")

现在我正在尝试访问上面创建的对象obj提供的方法。

help(obj)给了我

GetNetwork(self, gdNetworkId= <PyOleEmpty object>)

Get a network given a Network ID.

已连接

Returns whether connected to internet or not

//Other methods removed

所以,现在当我使用

>>> obj.IsConnected
True

效果很好。

现在我面临的问题是如何使用GetNetowrk 方法,因为当我尝试使用它时

>>> obj.GetNetwork()
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
      ret = self._oleobj_.InvokeTypes(2, LCID, 1, (9, 0), ((36, 1),),gdNetworkId
com_error: (-2147024809, 'The parameter is incorrect.', None, None)

我还尝试使用pythoncom.Empty 创建PyOleEmpty object,并将其作为参数传递,但没有成功。

我了解GetNetwork 需要NetworkID 作为参数,但GetNetworkId 方法是在INetwork 类中定义的。

所以我的问题是如何使用在使用MakePy utility 创建的不是CoClass 的python 文件中定义的类。

【问题讨论】:

    标签: python windows pywin32


    【解决方案1】:

    看起来获取网络对象的方法是使用 GetNetworks 枚举它们:

    networks=obj.GetNetworks(win32com.client.constants.NLM_ENUM_NETWORK_CONNECTED)
    for network in networks:
        print (network.GetName(), network.GetDescription())
    

    使用网络 ID 会有问题。它们被定义为原始结构,因此需要使用 Records 传递它们。 Pywin32 对 IRecordInfo 接口的支持还是比较弱的。

    【讨论】:

    • 很好,但我想知道你是怎么想出来的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多