2012-04-02 104 views
1

这个问题继续到我的previous question使用MakePy工具和win32com的PyWin32获取网络统计信息

我想为我的Windows 7系统使用PyWin32得到Network Statistics

步骤我跟着:

1)运行COM MakePy utility和比选择network list manager 1.0 type library类型库下。

2)以上过程生成此python file

接下来,我用

import win32com.client as wc 
obj = wc.Dispatch("{DCB00C01-570F-4A9B-8D69-199FDBA5723B}") 

现在我想通过访问上述创建的对象obj提供的方法创建NetworkListManager(CoClassBaseClass)类的对象。

help(obj)给我

GetNetwork(个体经营,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) 

我也尝试用pythoncom.Empty创建PyOleEmpty object,并通过它作为一个paremeter但没有运气。

我明白GetNetwork要求NetworkID作为参数,但方法GetNetworkId定义在INetwork类。

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

回答

2

它看起来像的方式来获得网络对象是枚举它们使用GetNetworks:

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

使用网络ID将是有问题的。他们被定义为原始结构,所以他们需要通过使用记录来传递。 Pywin32对IRecordInfo接口的支持仍然有点弱。

+0

不错,但我想知道你是怎么想出来的。 – RanRag 2012-04-04 14:41:35