Code:
' ======================================================================================== ' WMI example - Retrieving Disk information ' ======================================================================================== #Compile Exe #Dim All #Include "win32api.inc" #Include "TB_WMILIB.INC" ' // WMI helper functions ' see [url]http://www.powerbasic.com/support/pbforums/showpost.php?p=171374&postcount=3[/url] ' ======================================================================================== ' Main ' ======================================================================================== Function PBMain Local hr As Long ' // HRESULT Local oServices As Dispatch ' // Services object Local vServices As Variant ' // Services object reference Local oItems As Dispatch ' // Generic collection object Local vItems As Variant ' // Generic collection object reference Local oItem As Dispatch ' // Generic item object Local vItem As Variant ' // Generic item object reference Local penum As Dword ' // Collection's enumerator reference Local vCount As Variant ' // Number of items in the collection Local vVar As Variant ' // General purpose variant Local vRes As Variant ' // General purpose variant Local i As Long ' // Loop counter Local x As Long ' // Loop counter Local Result As Long Local Tmp As String Local Disp As String Dim vArray(0) As Variant ' // General purpose array of variants ' // Connect to WMI using a moniker hr = WmiGetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2", vServices) If hr <> %S_Ok Then GoTo Terminate Set oServices = vServices vServices = Empty If IsFalse IsObject(oServices) Then GoTo Terminate ' // Execute a query to get a reference to the collection of running processes vVar = "SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'" Object Call oServices.ExecQuery(vVar) To vItems If ObjResult Then GoTo Terminate Set oItems = vItems vItems = Empty If IsFalse IsObject(oItems) Then GoTo Terminate ' // Retrieve the number of items in the collection Object Get oItems.Count To vCount ' // Retrieve a reference to the collection's enumerator hr = Wmi_NewEnum(ObjPtr(oItems), penum) If hr <> %S_Ok Or penum = %NULL Then GoTo Terminate ' // Iterate throught the collection of objects. For i = 1 To Variant#(vCount) ' // Retrieve a reference to the next object in the collection hr = WmiEnum_NextItem(penum, vItem) If hr <> %S_Ok Then Exit For Set oItem = vItem If IsFalse IsObject(oItem) Then Exit For '------------------------------------------------------------------------ Object Get oItem.MediaType To vRes Disp = $Cr & "MediaType: " & $Tab & Variant$(vRes) '------------------------------------------------------------------------ Object Get oItem.VolumeSerialNumber To vRes Disp = Disp & $Cr & "VolumeSerialNumber: " & $Tab & Variant$(vRes) '------------------------------------------------------------------------ Object Get oItem.Model To vRes Disp = Disp & $Cr & "Model: " & $Tab & Variant$(vRes) '------------------------------------------------------------------------ Object Get oItem.PNPDeviceID To vRes Disp = Disp & $Cr & "PNP Device ID: " & $Tab & Variant$(vRes) '------------------------------------------------------------------------ Object Get oItem.DeviceID To vRes Disp = Disp & $Cr & "Device ID: " & $Tab & Variant$(vRes) '------------------------------------------------------------------------ Object Get oItem.Size To vRes Disp = Disp & $Cr & "Size: " & $Tab & Variant$(Vres)'Format$(Variant#(Vres)) '------------------------------------------------------------------------ Object Get oItem.TotalCylinders To vRes Disp = Disp & $Cr & "Cylinders: " & $Tab & Variant$(vRes) 'Format$(Variant#(vRes)) '------------------------------------------------------------------------ Object Get oItem.TotalHeads To vRes Disp = Disp & $Cr & "Heads: " & $Tab & Format$(Variant#(vRes)) '------------------------------------------------------------------------ Object Get oItem.TotalSectors To vRes Disp = Disp & $Cr & "Sectors: " & $Tab & Variant$(vRes) 'Format$(Variant#(vRes)) '------------------------------------------------------------------------ Object Get oItem.BytesPerSector To vRes Disp = Disp & $Cr & "BytesPerSector: " & $Tab & Format$(Variant#(vRes)) '------------------------------------------------------------------------ Set oItem = Nothing MsgBox Disp,, Tmp Next WmiRelease penum If IsObject(oItems) Then Set oItems = Nothing Terminate: If IsObject(oServices) Then Set oServices = Nothing End Function ' ========================================================================================
Leave a comment: