{$APPTYPE CONSOLE}

uses
SysUtils,
ActiveX,
ComObj,
Variants; 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(, objdiskDrive, iValue) = do
begin
Writeln(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(, objPartition, iValue) = do
begin
if not VarIsNull(objPartition.DeviceID) then
begin
Writeln(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(, objLogicalDisk, iValue) = do
begin
Writeln(Format(' Logical Disk %s',[string(objLogicalDisk.DeviceID)]));
objLogicalDisk:=Unassigned;
end;
end;
objPartition:=Unassigned;
end;
objdiskDrive:=Unassigned;
end;
end; begin
try
CoInitialize(nil);
try
ListDrives;
finally
CoUninitialize;
end;
except
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Readln;
end.

可以用WMI来获取磁盘及分区编号的更多相关文章

  1. windows下C语言编程获取磁盘(分区)使用情况

    windows下编程获取磁盘(分区)使用情况 windows下编程获取磁盘(分区)使用情况 GetLogicalDriveStrings函数 使用示例 获取需要的缓冲区长度示例 获取所有驱动器号示例 ...

  2. 主机性能监控之wmi 获取磁盘信息

    标 题: 主机性能监控之wmi 获取磁盘信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990541.html 欢迎转帖 请保持文本完整并注明出处 仅 ...

  3. Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件

    由于公司现阶段大多数应用软件都是基于Windows系统开发和部署,很多软件安装部署都是在windows server 2012.windows server 2008之类的服务器上,部门同事每次测试一 ...

  4. C# 获取磁盘剩余空间

    drive.TotalFreeSpace单位为bit,根据需要除以1024 drive同时可以可以获取磁盘分区容量等 //单位MB public static long GetHardDiskSpac ...

  5. Powershell获取磁盘信息

    使用Powershell完成系统管理实在是太方便了,磁盘信息获取只需几行代码即可. 1: $DiskCount = ((Get-WmiObject -Class Win32_DiskDrive).Ca ...

  6. [WinAPI] API 8 [获取磁盘空间信息]

    获取磁盘分区的总容量和空闲空间的容量可以使用GetDiskFreeSpace函数或GetDiskFree SpaceEx函数.GetDiskFreeSpace使用DWORD类型作为输出参数,由于DWO ...

  7. 转:C# 获取磁盘及CPU的序列号

    原文地址:http://www.cnblogs.com/stray521/archive/2010/08/06/1793647.html //获取磁盘序列号 try { System.Manageme ...

  8. windows程序设计 获取磁盘容量

    //磁盘分区的总容量(字节)=总簇数*每簇扇区数*每扇区字节数 //磁盘分区的空闲空间(字节)=空闲簇数*每簇扇区数*每扇区字节数 BOOL GetDiskFreeSpace( LPCTSTR lpR ...

  9. Linux系统磁盘与分区管理(7)

    Linux最传统的磁盘文件系统(filesystem)使用的是EXT4格式,所以要了解文件系统就得要由认识EXT4开始,而文件系统是创建在硬盘上面的,因此我们得了解硬盘的物理组成才行,下面我们回来详细 ...

随机推荐

  1. Java 两个变量交换值

    package test; public class Test {    public static void main(String[] args) {        int a, b;       ...

  2. String.join()方法的使用

    String.join()方法是JDK1.8之后新增的一个静态方法,使用方式如下所示: String  result = String.join("-","java&qu ...

  3. jackson annotations注解详解 (zhuan)

    http://blog.csdn.net/sdyy321/article/details/40298081 ************************************** 官方WIKI: ...

  4. Windows BAT文件使用技巧[转载]

    首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任 ...

  5. jquery: 一些常见的获取

    jq1.6+ 勾选checked $(#id).attr("checked", true); 判断checkbox是否选择 $(#id).prop("checked&qu ...

  6. 线性表 - 从零开始实现by C++

    参考链接:数据结构探险之线性表篇     线性表

  7. 图片左右滚动的js代码

    html代码 <div class="demo" id="demo" style="overflow:hidden; width:660px; ...

  8. 025-ViewData、ViewBag与TempData概述

    Action向View传递数据很简单,方式也很多,最直接的就是我们向View传递Model,这本身就是MVC的意义所在.如果是显示一些消息,像是错误信息,可以使用ViewData.ViewBag.Te ...

  9. jmeter 建立一个扩展LDAP测试计划

    添加用户 第一步你想做的每一个JMeter测试计划是添加一个线程组元素. 线程组告诉JMeter的用户数量你想模拟,用户应该发送的次数 请求,他们应该发送的请求的数量. 继续添加 线程组 首先选择元素 ...

  10. 通配符+countif()解决大于15位数的计数问题

    excel的最大精度是15位,如果一个单元格中存储的数字超过15位,那么函数在计算的时候将会出现问题,它们会将15位之后的数字变成0. 在这种情况下,需要在函数中加入通配符,例如,统计A列中,A1出现 ...