这个问题是继续我的previous question。
我正在尝试使用Network Statistics
为Windows 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
作为参数,但方法GetNetworkId
在INetwork类中定义。
所以我的问题是如何使用MakePy utility
创建的python文件中定义的类CoClass
。
答案 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接口的支持仍然有点弱。