2012-04-02 56 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