You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
2.2 KiB
53 lines
2.2 KiB
import unittest as ut
|
|
from ctypes import POINTER
|
|
from comtypes.client import CoGetObject
|
|
from comtypes.test import requires
|
|
|
|
requires("time")
|
|
|
|
# WMI has dual interfaces.
|
|
# Some methods/properties have "[out] POINTER(VARIANT)" parameters.
|
|
# This test checks that these parameters are returned as strings:
|
|
# that's what VARIANT.__ctypes_from_outparam__ does.
|
|
class Test(ut.TestCase):
|
|
def test_wmi(self):
|
|
wmi = CoGetObject("winmgmts:")
|
|
disks = wmi.InstancesOf("Win32_LogicalDisk")
|
|
|
|
# There are different typelibs installed for WMI on win2k and winXP.
|
|
# WbemScripting refers to their guid:
|
|
# Win2k:
|
|
# import comtypes.gen._565783C6_CB41_11D1_8B02_00600806D9B6_0_1_1 as mod
|
|
# WinXP:
|
|
# import comtypes.gen._565783C6_CB41_11D1_8B02_00600806D9B6_0_1_2 as mod
|
|
# So, the one that's referenced onm WbemScripting will be used, whether the actual
|
|
# typelib is available or not. XXX
|
|
from comtypes.gen import WbemScripting
|
|
WbemScripting.wbemPrivilegeCreateToken
|
|
|
|
for item in disks:
|
|
# obj[index] is forwarded to obj.Item(index)
|
|
# .Value is a property with "[out] POINTER(VARIANT)" parameter.
|
|
a = item.Properties_["Caption"].Value
|
|
b = item.Properties_.Item("Caption").Value
|
|
c = item.Properties_("Caption").Value
|
|
self.assertEqual(a, b)
|
|
self.assertEqual(a, c)
|
|
self.assertTrue(isinstance(a, str))
|
|
self.assertTrue(isinstance(b, str))
|
|
self.assertTrue(isinstance(c, str))
|
|
result = {}
|
|
for prop in item.Properties_:
|
|
self.assertTrue(isinstance(prop.Name, str))
|
|
prop.Value
|
|
result[prop.Name] = prop.Value
|
|
## print "\t", (prop.Name, prop.Value)
|
|
self.assertEqual(len(item.Properties_), item.Properties_.Count)
|
|
self.assertEqual(len(item.Properties_), len(result))
|
|
self.assertTrue(isinstance(item.Properties_["Description"].Value, str))
|
|
# len(obj) is forwared to obj.Count
|
|
self.assertEqual(len(disks), disks.Count)
|
|
|
|
if __name__ == "__main__":
|
|
ut.main()
|