github.com/ContinuumLLC/godep-go-ole-go-ole@v1.2.0/ienumvariant_test.go (about) 1 // +build windows 2 3 package ole 4 5 import "testing" 6 7 func TestIEnumVariant_wmi(t *testing.T) { 8 var err error 9 var classID *GUID 10 11 IID_ISWbemLocator := &GUID{0x76a6415b, 0xcb41, 0x11d1, [8]byte{0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}} 12 13 err = CoInitialize(0) 14 if err != nil { 15 t.Errorf("Initialize error: %v", err) 16 } 17 defer CoUninitialize() 18 19 classID, err = ClassIDFrom("WbemScripting.SWbemLocator") 20 if err != nil { 21 t.Errorf("CreateObject WbemScripting.SWbemLocator returned with %v", err) 22 } 23 24 comserver, err := CreateInstance(classID, IID_IUnknown) 25 if err != nil { 26 t.Errorf("CreateInstance WbemScripting.SWbemLocator returned with %v", err) 27 } 28 if comserver == nil { 29 t.Error("CreateObject WbemScripting.SWbemLocator not an object") 30 } 31 defer comserver.Release() 32 33 dispatch, err := comserver.QueryInterface(IID_ISWbemLocator) 34 if err != nil { 35 t.Errorf("context.iunknown.QueryInterface returned with %v", err) 36 } 37 defer dispatch.Release() 38 39 wbemServices, err := dispatch.CallMethod("ConnectServer") 40 if err != nil { 41 t.Errorf("ConnectServer failed with %v", err) 42 } 43 defer wbemServices.Clear() 44 45 objectset, err := wbemServices.ToIDispatch().CallMethod("ExecQuery", "SELECT * FROM WIN32_Process") 46 if err != nil { 47 t.Errorf("ExecQuery failed with %v", err) 48 } 49 defer objectset.Clear() 50 51 enum_property, err := objectset.ToIDispatch().GetProperty("_NewEnum") 52 if err != nil { 53 t.Errorf("Get _NewEnum property failed with %v", err) 54 } 55 defer enum_property.Clear() 56 57 enum, err := enum_property.ToIUnknown().IEnumVARIANT(IID_IEnumVariant) 58 if err != nil { 59 t.Errorf("IEnumVARIANT() returned with %v", err) 60 } 61 if enum == nil { 62 t.Error("Enum is nil") 63 t.FailNow() 64 } 65 66 for tmp, length, err := enum.Next(1); length > 0; tmp, length, err = enum.Next(1) { 67 if err != nil { 68 t.Errorf("Next() returned with %v", err) 69 } 70 tmp_dispatch := tmp.ToIDispatch() 71 defer tmp_dispatch.Release() 72 73 props, err := tmp_dispatch.GetProperty("Properties_") 74 if err != nil { 75 t.Errorf("Get Properties_ property failed with %v", err) 76 } 77 defer props.Clear() 78 79 props_enum_property, err := props.ToIDispatch().GetProperty("_NewEnum") 80 if err != nil { 81 t.Errorf("Get _NewEnum property failed with %v", err) 82 } 83 defer props_enum_property.Clear() 84 85 _, err = props_enum_property.ToIUnknown().IEnumVARIANT(IID_IEnumVariant) 86 if err != nil { 87 t.Errorf("IEnumVARIANT failed with %v", err) 88 } 89 90 class_variant, err := tmp_dispatch.GetProperty("Name") 91 if err != nil { 92 t.Errorf("Get Name property failed with %v", err) 93 } 94 defer class_variant.Clear() 95 96 class_name := class_variant.ToString() 97 t.Logf("Got %v", class_name) 98 } 99 }