求高手帮忙修改段Delphi 调用的WMI代码

qq_25574441 2015-04-29 03:52:33
代码的主要作用是获取当前哪个硬盘 每个硬盘对应的分区 并获取分区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;
...全文
710 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_25574441 2015-05-01
  • 打赏
  • 举报
回复
Win32_Volume 能获取准备 连WIN7的保留系统都显示了 但是XP下好像不能使用这个参数 救命啊 各位大神!!!!!!!!!!!!
qq_25574441 2015-05-01
  • 打赏
  • 举报
回复
引用 2 楼 pathletboy 的回复:
其实F盘输出了,至于为啥错位,暂时看不出原因。
因为我用的是win7系统 带有系统的100M保留分区 估计0那个是保留分区
pathletboy 2015-04-30
  • 打赏
  • 举报
回复
其实F盘输出了,至于为啥错位,暂时看不出原因。
qq_25574441 2015-04-30
  • 打赏
  • 举报
回复
自己顶下 求高手帮忙
发帖
Windows SDK/API

1177

社区成员

Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
帖子事件
创建了帖子
2015-04-29 03:52
社区公告
暂无公告