AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetLogicalDrives und DiskSize/DiskFree

Ein Thema von Willie1 · begonnen am 22. Jan 2025 · letzter Beitrag vom 24. Jan 2025
 
jus

Registriert seit: 22. Jan 2005
350 Beiträge
 
Delphi 2007 Professional
 
#5

AW: GetLogicalDrives und DiskSize/DiskFree

  Alt 24. Jan 2025, 22:41
also ich muß zugeben, dass ich auch nicht der WMI Profi bin, aber als Ausgangspunkt verwende ich gerne für die WMI Quellcode Erzeugung den WMI Delphi Code Creator von der The Road to Delphi Seite(siehe auch angehängtes Foto). Die aktuelle Version findest du hier.
Der erzeugte Sourcecode von WMI Delphi Code Creator ist meist schon lauffähig. Der Quellcode von Button1 bis Button3 wurde mit dem WMI Delphi Code Creator erzeugt und geringfügig angepaßt. Ich denke, dass du mit den Infos theoretisch die Daten selber zusammenfügen kannst.

Als Bonus habe ich zufälliger Weise für die Zuordnung der Laufswerksbuchstaben ein funktionierendes Beispiel wieder von der The Road to Delphi Seite gefunden und in Button4 eingebaut.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActiveX, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    function getString( value: OLEVariant ): String;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  WbemUser ='';
  WbemPassword ='';
  WbemComputer ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject : OLEVariant;
  oEnum : IEnumvariant;
  iValue : LongWord;
begin;
  CoInitialize(nil);
  try
    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
    FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive','WQL',wbemFlagForwardOnly);
    oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
    while oEnum.Next(1, FWbemObject, iValue) = 0 do
    begin
      Memo1.Lines.Add(Format('Caption %s',[getString(FWbemObject.Caption)]));// String
      Memo1.Lines.Add(Format('DeviceID %s',[getString(FWbemObject.DeviceID)]));// String
      Memo1.Lines.Add(Format('Index %s',[getString(FWbemObject.index)]));// String
      Memo1.Lines.Add(Format('InterfaceType %s',[getString(FWbemObject.InterfaceType)]));// Array of String
      Memo1.Lines.Add(Format('MediaType %s',[getString(FWbemObject.MediaType)]));// Array of String
      Memo1.Lines.Add(Format('Model %s',[getString(FWbemObject.Model)]));// String
      Memo1.Lines.Add(Format('SerialNumber %s',[getString(FWbemObject.SerialNumber)]));// String
      Memo1.Lines.Add(Format('Size %s',[getString(FWbemObject.Size)]));// Uint64
      Memo1.Lines.Add('------------------------------------------');
      FWbemObject:=Unassigned;
    end;
  finally
    CoUninitialize;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
const
  WbemUser ='';
  WbemPassword ='';
  WbemComputer ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject : OLEVariant;
  oEnum : IEnumvariant;
  iValue : LongWord;
begin;
  CoInitialize(nil);
  try
    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
    FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_DiskDriveToDiskPartition','WQL',wbemFlagForwardOnly);
    oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
    while oEnum.Next(1, FWbemObject, iValue) = 0 do
    begin
      Memo1.Lines.Add(Format('Antecedent %s',[String(FWbemObject.Antecedent)]));// String
      Memo1.Lines.Add(Format('Dependent %s',[String(FWbemObject.Dependent)]));// String
      Memo1.Lines.Add('------------------------------------------');
      FWbemObject:=Unassigned;
    end;
  finally
    CoUninitialize;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
const
  WbemUser ='';
  WbemPassword ='';
  WbemComputer ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject : OLEVariant;
  oEnum : IEnumvariant;
  iValue : LongWord;
begin;
  CoInitialize(nil);
  try
    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
    FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_LogicalDiskToPartition','WQL',wbemFlagForwardOnly);
    oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
    while oEnum.Next(1, FWbemObject, iValue) = 0 do
    begin
      Memo1.Lines.Add(Format('Antecedent %s',[String(FWbemObject.Antecedent)]));// String
      Memo1.Lines.Add(Format('Dependent %s',[String(FWbemObject.Dependent)]));// String
      Memo1.Lines.Add('------------------------------------------');
      FWbemObject:=Unassigned;
    end;
  finally
    CoUninitialize;
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
{
  ursprüngliche Quelle: https://theroadtodelphi.com/2011/10/25/wmi-tasks-using-delphi-%E2%80%93-disks-and-file-systems/
}

const
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  wmiDiskDrives : OLEVariant;
  wmiDiskPartitions : OLEVariant;
  wmiLogicalDisks : OLEVariant;
  wmiDiskDrive : OLEVariant;
  wmiDiskPartition : OLEVariant;
  wmiLogicalDisk : OLEVariant;
  oEnum : IEnumvariant;
  oEnum2 : IEnumvariant;
  oEnum3 : IEnumvariant;
  iValue : LongWord;
  DeviceID : string;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
  //Get the physical disk drive
  wmiDiskDrives := FWMIService.ExecQuery('SELECT Caption, DeviceID FROM Win32_DiskDrive','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(wmiDiskDrives._NewEnum) as IEnumVariant;
  while oEnum.Next(1, wmiDiskDrive, iValue) = 0 do
  begin
     //Use the disk drive device id to find associated partition
     DeviceID:=StringReplace(String(wmiDiskDrive.DeviceID),'\','\\',[rfReplaceAll]);
     wmiDiskPartitions := FWMIService.ExecQuery('ASSOCIATORS OF {Win32_DiskDrive.DeviceID="'+DeviceID+'"} WHERE AssocClass = Win32_DiskDriveToDiskPartition','WQL',wbemFlagForwardOnly);
     oEnum2 := IUnknown(wmiDiskPartitions._NewEnum) as IEnumVariant;
     while oEnum2.Next(1, wmiDiskPartition, iValue) = 0 do
     begin
        wmiLogicalDisks := FWMIService.ExecQuery('ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+String(wmiDiskPartition.DeviceID)+'"} WHERE AssocClass = Win32_LogicalDiskToPartition','WQL',wbemFlagForwardOnly);
        oEnum3 := IUnknown(wmiLogicalDisks._NewEnum) as IEnumVariant;
        while oEnum3.Next(1, wmiLogicalDisk, iValue) = 0 do
        begin
          Memo1.Lines.Add(Format('Drive letter associated with disk drive %s %s Partition %s is %s',[String(wmiDiskDrive.Caption),String(wmiDiskDrive.DeviceID),String(wmiDiskPartition.DeviceID),String(wmiLogicalDisk.DeviceID)]));
          wmiLogicalDisk:=Unassigned;
        end;
       wmiDiskPartition:=Unassigned;
     end;
    wmiDiskDrive:=Unassigned;
  end;
end;

function TForm1.getString( value: OLEVariant ): String;
begin
  if VarIsNull( value ) then result := ''
  else result := String( value );
end;

end.
Angehängte Grafiken
Dateityp: jpg DelphiWMICodeCreator.jpg (188,5 KB, 18x aufgerufen)
Angehängte Dateien
Dateityp: zip WMIDiskdrives.zip (5,8 KB, 6x aufgerufen)

Geändert von jus (24. Jan 2025 um 23:17 Uhr)
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz