anbei ein beispiel dass dir möglicherweise weiterhelfen wird...
Code: Alles auswählen
;/////////////////////////////////////////////////////////////// 
;// Disk Drive WMI Comate Example                      // 
;// jpd                                                               // 
;/////////////////////////////////////////////////////////////// 
Enumeration
  #DiskNr
  #List_partition
  #Check_USB
EndEnumeration
IncludeFile "COMate.pbi"
Structure PartitionInfo
  
  Partition.s
  DriveLetter.s
  FileSystem.s
  FreeSpace.s
  Size.s
  VolumeName.s
  VolumeSerialNumber.s
  Bootable.l
  BootPartition.l
  PrimaryPartition.l
  Type.s
          
 EndStructure 
Structure DiskInfo
  DiskNr.s
  PartNr.PartitionInfo
  DeviceID.s
  PNPDeviceID.s
  FirmwareRevision.s
  InterfaceType.s
  MediaType.s
  Model.s
  Status.s
EndStructure
Global NewList info.DiskInfo()
Procedure Partition_To_DiskDrive(devID.s)
  
  Define.COMateObject objWMIService, USBCfg,EnumUSB
  strComputer.s = "." 
  objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "") 
  If objWMIService 
    EnumUSBset.COMateEnumObject 
    x=0
   Debug devID
    EnumUSBset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_DiskDrive Where DeviceID= $0027" + devID +"$0027')") 
    Debug  COMate_GetLastErrorCode() 
    Debug COMate_GetLastErrorDescription() 
    If EnumUSBset
      EnumUSB = EnumUSBset\GetNextObject() 
      While EnumUSB
        If EnumUSB
          Debug x
          Debug "Description: "+EnumUSB\GetstringProperty("Description")
          info()\FirmwareRevision=EnumUSB\GetstringProperty("FirmwareRevision")
          info()\InterfaceType=EnumUSB\GetstringProperty("InterfaceType")
          info()\MediaType=EnumUSB\GetstringProperty("MediaType")
          info()\Model=EnumUSB\GetstringProperty("Model")
          info()\PNPDeviceID=EnumUSB\GetstringProperty("PNPDeviceID")
          info()\Status=EnumUSB\GetstringProperty("Status")
          EnumUSB\Release() 
          x=x+1
        EndIf 
        EnumUSB = EnumUSBset\GetNextObject() 
      Wend
      EnumUSBset\Release() 
    EndIf
    objWMIService\Release() 
  EndIf
    
EndProcedure   
Procedure Win32_DiskDrivePhysicalMedia()
  Define.COMateObject objWMIService, EnumDiskDrive
  EnumDiskDriveset.COMateEnumObject 
  strComputer.s = "." 
  objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "") 
  If objWMIService 
   
    x=0
    EnumDiskDriveset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_DiskDrivePhysicalMedia')")
    If EnumDiskDriveset
     EnumDiskDrive = EnumDiskDriveset\GetNextObject() 
     While EnumDiskDrive
        If EnumDiskDrive
          physdrive.l=FindString(EnumDiskDrive\GetstringProperty("Antecedent"),"\\\\.\\PHYSICALDRIVE",1)
          If physdrive
            diskpart.s=RemoveString(Mid(EnumDiskDrive\GetstringProperty("Antecedent"),physdrive,Len("\\\\.\\PHYSICALDRIVE")+2),Chr(34))
            Partition_To_DiskDrive(diskpart)
          EndIf 
        EndIf
        EnumDiskDrive = EnumDiskDriveset\GetNextObject() 
      Wend
      EnumDiskDriveset\Release() 
    EndIf
    objWMIService\Release() 
  EndIf
EndProcedure
Procedure.s Diskpartition(diskpart.s)
  found.l= FindString(diskpart,Chr(34),1)
  ProcedureReturn  Mid(diskpart,found,Len(diskpart)-found+1)
  
EndProcedure 
Procedure LogicalDiskToPartition(antecedent.s)
  Define.COMateObject objWMIService, EnumLDisk
  EnumLDiskset.COMateEnumObject 
  strComputer.s = "." 
  objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "") 
  If objWMIService 
    x=0
    antecedent=ReplaceString(antecedent, "\", "\\")
    EnumLDiskset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_LogicalDiskToPartition Where Antecedent= $0027" + antecedent +"$0027')") 
    If EnumLDiskset
      EnumLDisk = EnumLDiskset\GetNextObject() 
      While EnumLDisk
        If EnumLDisk
          driveletter.s=EnumLDisk\GetstringProperty("Dependent")
          info()\PartNr\DriveLetter=RemoveString(diskpartition(driveletter),Chr(34))
          EnumLDisk\Release() 
        EndIf
        EnumLDisk = EnumLDiskset\GetNextObject() 
      Wend
      EnumLDiskset\Release() 
    EndIf
    objWMIService\Release() 
  EndIf
EndProcedure
Procedure Win32_DiskDriveToDiskPartition()
  Define.COMateObject objWMIService, EnumDisk
  EnumDiskset.COMateEnumObject 
  strComputer.s = "." 
  objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "") 
  If objWMIService 
    x=0
    EnumDiskset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_DiskDriveToDiskPartition')"); Where DeviceID= $0027" + devID +"$0027')") 
    If EnumDiskset
      EnumDisk = EnumDiskset\GetNextObject() 
      While EnumDisk
        If EnumDisk
          Debug x
          AddElement(Info())
          diskpart.s=  EnumDisk\GetstringProperty("Dependent")
          LogicalDiskToPartition(diskpart)
          diskpartition(diskpart)
          For xx=1 To CountString(diskpartition(diskpart),",")+1
            Ergebnis$ = StringField(diskpartition(diskpart), xx, ",")
            Ergebnis$= RemoveString(Ergebnis$,Chr(34))
            If xx=1
              Info()\DiskNr=Ergebnis$
              Debug "Disk Nr: "+Ergebnis$
              If tmp$<>Ergebnis$
                Debug "DisktoCheck: "+Ergebnis$
                tmp$=Ergebnis$
                diskNr.s=RemoveString(tmp$,"Disk #")
                Debug DiskNr
              EndIf 
              y=x
            Else
              Debug "Partition Nr: "+Ergebnis$
              Info()\PartNr\Partition=Ergebnis$
              y=x
              x=x+1 
            EndIf      
          Next 
          physdrive.l=FindString(EnumDisk\GetstringProperty("Antecedent"),"\\\\.\\PHYSICALDRIVE",1)
          If physdrive
            diskpart.s=RemoveString(Mid(EnumDisk\GetstringProperty("Antecedent"),physdrive,Len("\\\\.\\PHYSICALDRIVE")+2),Chr(34))
            Debug diskpart
            If tmpdisk$<>diskpart
              tmpdisk$=diskpart
              Info()\DeviceID=EnumDisk\GetstringProperty("Antecedent")
              Partition_To_DiskDrive(diskpart)
            EndIf
          EndIf 
        EndIf
        EnumDisk = EnumDiskset\GetNextObject() 
      Wend
      EnumDiskset\Release() 
    EndIf
    objWMIService\Release() 
  EndIf
EndProcedure
Procedure Win32_DiskPartition(DeviceID.s)
  Define.COMateObject objWMIService, EnumPart
  EnumPartset.COMateEnumObject 
  strComputer.s = "." 
  objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "") 
  If objWMIService 
    x=0
    EnumPartset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_DiskPartition Where DeviceID= $0027" + DeviceID +"$0027')") 
    If EnumPartset
      EnumPart = EnumPartset\GetNextObject() 
      While EnumPart
        If EnumPart
          Info()\PartNr\Bootable=EnumPart\GetIntegerProperty("Bootable")
          Info()\PartNr\BootPartition=EnumPart\GetIntegerProperty("BootPartition")
          Info()\PartNr\PrimaryPartition=EnumPart\GetIntegerProperty("PrimaryPartition")
          Info()\PartNr\Type=EnumPart\GetstringProperty("Type")
        EndIf
        EnumPart = EnumPartset\GetNextObject() 
      Wend
      EnumPartset\Release() 
    EndIf
    objWMIService\Release() 
  EndIf
EndProcedure
Procedure.s DiskSpace(strval.s)
  
  Protected lpTotalNumberOfBytes.q, res.f, CapStr.s
  
  lpTotalNumberOfBytes=ValQ(strval.s)
  res=  lpTotalNumberOfBytes/(1024*1024*1024)
  CapStr= StrD(res,2)
  ProcedureReturn CapStr 
 
EndProcedure 
Procedure Win32_LogicalDisk(Driveletter.s)
  Define.COMateObject objWMIService, EnumDrive
  EnumDriveset.COMateEnumObject 
  strComputer.s = "." 
  objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "") 
  If objWMIService 
    x=0
    EnumDriveset = objWMIService\CreateEnumeration("ExecQuery('Select * From Win32_LogicalDisk Where Caption= $0027" + Driveletter +"$0027')") 
    If EnumDriveset
      EnumDrive = EnumDriveset\GetNextObject() 
      While EnumDrive
        If EnumDrive
          Debug x
          Debug EnumDrive\GetstringProperty("Caption")
          Info()\PartNr\FileSystem=EnumDrive\GetstringProperty("FileSystem")
          Info()\PartNr\FreeSpace=DiskSpace(EnumDrive\GetstringProperty("FreeSpace"))
          Info()\PartNr\Size=DiskSpace(EnumDrive\GetstringProperty("Size"))
          Info()\PartNr\VolumeName=EnumDrive\GetstringProperty("VolumeName")
          Info()\PartNr\VolumeSerialNumber= EnumDrive\GetstringProperty("VolumeSerialNumber")
        EndIf
        EnumDrive = EnumDriveset\GetNextObject() 
      Wend
      EnumDriveset\Release() 
    EndIf
    objWMIService\Release() 
  EndIf
EndProcedure
Procedure Start()
ClearList(Info())
ClearGadgetItemList(#List_partition)
ClearGadgetItemList(#DiskNr)
Win32_DiskDriveToDiskPartition()
    
    ResetList(Info())
    x=0
    While NextElement(Info())
      Win32_LogicalDisk(Info()\PartNr\Driveletter)
      Win32_DiskPartition(Info()\DiskNr+","+Info()\partNr\Partition)
      If tmpdisk.s <>Info()\DiskNr
        If  Info()\InterfaceType <> "" And GetGadgetState(#Check_USB) =0
          
          AddGadgetItem(#DiskNr, -1, Info()\DiskNr)
          SetGadgetItemText(#DiskNr, x, Info()\InterfaceType,1)
          SetGadgetItemText(#DiskNr, x, Info()\MediaType,2)
          SetGadgetItemText(#DiskNr, x, Info()\Model,3)
          SetGadgetItemText(#DiskNr, x, Info()\DeviceID,4)
          SetGadgetItemText(#DiskNr, x, Info()\PNPDeviceID,5)
          SetGadgetItemText(#DiskNr, x, Info()\FirmwareRevision,6)
          SetGadgetItemText(#DiskNr, x, Info()\Status,7)
          x=x+1
          tmpdisk.s =Info()\DiskNr
        ElseIf Info()\InterfaceType = "USB" And GetGadgetState(#Check_USB) =1
          AddGadgetItem(#DiskNr, -1, Info()\DiskNr)
          SetGadgetItemText(#DiskNr, x, Info()\InterfaceType,1)
          SetGadgetItemText(#DiskNr, x, Info()\MediaType,2)
          SetGadgetItemText(#DiskNr, x, Info()\Model,3)
          SetGadgetItemText(#DiskNr, x, Info()\DeviceID,4)
          SetGadgetItemText(#DiskNr, x, Info()\PNPDeviceID,5)
          SetGadgetItemText(#DiskNr, x, Info()\FirmwareRevision,6)
          SetGadgetItemText(#DiskNr, x, Info()\Status,7)
          x=x+1
          
        EndIf
        
      EndIf   
    Wend
EndProcedure
If OpenWindow(0, 100, 100, 800, 550, "Disk Drive", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ListIconGadget(#DiskNr, 5, 5, 790, 250, "DiskNr", 80, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
      AddGadgetColumn(#DiskNr, 1, "InterfaceType", 50)
      AddGadgetColumn(#DiskNr, 2, "MediaType", 100)
      AddGadgetColumn(#DiskNr, 3, "Model", 100)
      AddGadgetColumn(#DiskNr, 4, "DeviceID", 100)
      AddGadgetColumn(#DiskNr, 5, "PNPDeviceID", 100)
      AddGadgetColumn(#DiskNr, 6, "FirmwareRevision", 100)
      AddGadgetColumn(#DiskNr, 7, "Status", 100)
    ListIconGadget(#List_partition, 5, 260, 790, 250, "Partition", 80, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
      AddGadgetColumn(#List_partition, 1, "DriveLetter", 40)
      AddGadgetColumn(#List_partition, 2, "FileSystem", 50)
      AddGadgetColumn(#List_partition, 3, "Size Gb:", 60)
      AddGadgetColumn(#List_partition, 4, "FreeSpace Gb:", 60)
      AddGadgetColumn(#List_partition, 5, "FreeSpace %:", 50)
      AddGadgetColumn(#List_partition, 6, "VolumeName", 100)
      AddGadgetColumn(#List_partition, 7, "VolumeSerialNumber", 80)
      AddGadgetColumn(#List_partition, 8, "Bootable", 40)
      AddGadgetColumn(#List_partition, 9, "BootPartition", 40)
      AddGadgetColumn(#List_partition, 10, "PrimaryPartition", 40)
      AddGadgetColumn(#List_partition, 11, "Type", 100)
    CheckBoxGadget(#Check_USB,5,520,150,20,"View only USB Device")
  EndIf
EndIf
    
    start() 
    Repeat
      Event = WaitWindowEvent()
        Select Event 
          Case #PB_Event_Gadget 
            Select EventGadget() 
              Case #Check_USB
              If GetGadgetState(#Check_USB)
                Debug "check"
                start() 
              Else
                Debug "Uncheck"
                start() 
              EndIf
              Case #DiskNr
                Debug GetGadgetState(#DiskNr) 
                ResetList(info())
                ClearGadgetItemList(#List_partition)
                x=0
                While NextElement(Info())
                  If Info()\DiskNr=GetGadgetItemText(#DiskNr, GetGadgetState(#DiskNr))
                    AddGadgetItem(#List_partition, -1, info()\partNr\Partition)
                    SetGadgetItemText(#List_partition, x, Info()\PartNr\Driveletter,1)
                    SetGadgetItemText(#List_partition, x, Info()\PartNr\FileSystem,2)
                    SetGadgetItemText(#List_partition, x, Info()\PartNr\FreeSpace,4)
                    SetGadgetItemText(#List_partition, x, Info()\PartNr\Size,3)
                    procent.s=StrD((ValF(Info()\PartNr\FreeSpace)*100)/ValF(Info()\PartNr\Size),2)+" %"
                    SetGadgetItemText(#List_partition, x, procent,5)
                    SetGadgetItemText(#List_partition, x, Info()\PartNr\VolumeName,6)
                    SetGadgetItemText(#List_partition, x, Info()\PartNr\VolumeSerialNumber,7)
                    SetGadgetItemText(#List_partition, x, RemoveString(Str(Info()\PartNr\Bootable),"-"),8)
                    SetGadgetItemText(#List_partition, x, RemoveString(Str(Info()\PartNr\BootPartition),"-"),9)
                    SetGadgetItemText(#List_partition, x, RemoveString(Str(Info()\PartNr\PrimaryPartition),"-"),10)
                    SetGadgetItemText(#List_partition, x, Info()\PartNr\Type,11)
                    x=x+1
                  EndIf
                Wend 
            EndSelect
        EndSelect
    Until Event = #PB_Event_CloseWindow