PyWin32使用MakePy实用程序和win32com获取网络统计信息

时间:2012-04-02 19:01:31

标签: python windows pywin32

这个问题是继续我的previous question

我正在尝试使用Network StatisticsWindows 7系统获取PyWin32

我遵循的步骤:

  

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.

IsConnected

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)

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

我理解GetNetwork需要NetworkID作为参数,但方法GetNetworkIdINetwork类中定义。

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

1 个答案:

答案 0 :(得分:2)

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

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

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