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.