代碼的主要作用是獲取當前哪個硬碟 每個硬碟對應的磁區 并獲取磁區ID 如:

以下是一個高人幫忙寫的代碼 但是我的電腦里獲取有點錯誤,又聯系不上他 所以在這里請牛哥們幫幫忙
沒能獲取到我的F盤是在哪個硬碟 和 磁區 以下是我獲取到的截圖

以下為代碼:
Uses ActiveX,ComObj;
function ListDrives : string;
var
FSWbemLocator : OLEVariant;
objWMIService : OLEVariant;
colDiskDrives : OLEVariant;
colLogicalDisks: OLEVariant;
colPartitions : OLEVariant;
objdiskDrive : OLEVariant;
objPartition : OLEVariant;
objLogicalDisk : OLEVariant;
oEnumDiskDrive : IEnumvariant;
oEnumPartition : IEnumvariant;
oEnumLogical : IEnumvariant;
iValue : LongWord;
DeviceID : string;
begin;
Result:='';
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
colDiskDrives := objWMIService.ExecQuery('SELECT DeviceID FROM Win32_DiskDrive');
oEnumDiskDrive := IUnknown(colDiskDrives._NewEnum) as IEnumVariant;
while oEnumDiskDrive.Next(1, objdiskDrive, iValue) = 0 do
begin
Form1.Memo1.Lines.Add(Format('DeviceID %s',[string(objdiskDrive.DeviceID)]));
DeviceID := StringReplace(objdiskDrive.DeviceID,'\','\\',[rfReplaceAll]);
colPartitions := objWMIService.ExecQuery(Format('ASSOCIATORS OF {Win32_DiskDrive.DeviceID="%s"} WHERE AssocClass = Win32_DiskDriveToDiskPartition',[DeviceID]));
oEnumPartition := IUnknown(colPartitions._NewEnum) as IEnumVariant;
while oEnumPartition.Next(1, objPartition, iValue) = 0 do
begin
if not VarIsNull(objPartition.DeviceID) then
begin
Form1.Memo1.Lines.Add(Format(' Partition %s',[string(objPartition.DeviceID)]));
colLogicalDisks := objWMIService.ExecQuery('ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+VarToStr(objPartition.DeviceID)+'"} WHERE AssocClass = Win32_LogicalDiskToPartition');
oEnumLogical := IUnknown(colLogicalDisks._NewEnum) as IEnumVariant;
while oEnumLogical.Next(1, objLogicalDisk, iValue) = 0 do
begin
Form1.Memo1.Lines.Add(Format(' Logical Disk %s',[string(objLogicalDisk.DeviceID)]));
objLogicalDisk:=Unassigned;
end;
end;
objPartition:=Unassigned;
end;
objdiskDrive:=Unassigned;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
CoInitialize(nil);
try
ListDrives;
finally
CoUninitialize;
end;
except
on E:Exception do
Form1.Memo1.Lines.Add(E.Classname+ ':'+ E.Message);
end;
end;
uj5u.com熱心網友回復:
自己頂下 求高手幫忙uj5u.com熱心網友回復:
其實F盤輸出了,至于為啥錯位,暫時看不出原因。
uj5u.com熱心網友回復:
因為我用的是win7系統 帶有系統的100M保留磁區 估計0那個是保留磁區
uj5u.com熱心網友回復:
Win32_Volume 能獲取準備 連WIN7的保留系統都顯示了 但是XP下好像不能使用這個引數 救命啊 各位大神!!!!!!!!!!!!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/86065.html
下一篇:苦逼的Java編程
