Mam's WebSite
建築CGパース住宅CGパース

Mamの覚書Q&A検索

トップページMamの覚書Q&A検索Delphi(いろいろ)⇒Q&A


大項目:「 Delphi 」 - 中項目:「 いろいろ 」

「 WMIでUSBハードディスクの一覧を取得する 」

WMIでUSBハードディスクの一覧を取得する


回答

ソース

unit U_WMI_Disk_Main;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs
  ,WbemScripting_TLB, Vcl.StdCtrls
  ,strutils
  ,U_ListForm, Vcl.Grids;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  WMIServices: ISWbemServices;
  Drives: ISWbemObjectSet;
  objDrive: Variant;
  colPartitions,objPartition:Variant;
  colLogicalDisks,objLogicalDisk:Variant;
  i,j,k,l: Integer;
  strDeviceID:String;
  str_deviceID:String;
 
  str_driveLetter:string;
  str_model:String;
  flag:boolean;
begin
  F_List.lv.Items.Clear;
 
  WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2',     '', '', '', '', 0, nil);
  Drives := WMIServices.ExecQuery('Select * FROM Win32_DiskDrive','WQL', 0, nil);
  for i := 0 to Drives.Count - 1 do
  begin
    objDrive := Drives.ItemIndex(i);
    strDeviceID:=objDrive.DeviceID;
    str_model:=objDrive.model;
    strDeviceID:=ReplaceStr(strDeviceID,'\','\\');
    colPartitions:=WMIServices.ExecQuery('ASSOCIATORS OF {Win32_DiskDrive.DeviceID="' +
           strDeviceID + '"} WHERE AssocClass = Win32_DiskDriveToDiskPartition','WQL',0,nil);
    for j := 0 to colPartitions.Count-1 do
    begin
      objPartition:=colPartitions.ItemIndex(j);
      colLogicalDisks:= WMIServices.ExecQuery
            ('ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+
                objPartition.DeviceID + '"} WHERE AssocClass = '+
                    'Win32_LogicalDiskToPartition','WQL',0,nil);
      for k := 0 to colLogicalDisks.Count-1 do
      begin
        objLogicalDisk:=colLogicalDisks.ItemIndex(k);
        str_driveLetter:=objLogicalDisk.DeviceID;
        str_deviceID:=objDrive.PNPDeviceID;
        if leftstr(str_deviceID,3)<>'IDE' then
        begin
          F_List.lv.AddItem(str_driveLetter,nil);
          F_List.lv.Items[F_List.lv.Items.Count-1].SubItems.Add(str_model);
          F_List.lv.Items[F_List.lv.Items.Count-1].SubItems.Add(str_deviceID);
          flag:=false;
          for l := 0 to F_List.M_Security.Lines.Count-1 do
          begin
            if F_List.M_Security.Lines[l]=str_model then
              flag:=True;
          end;
          if flag then
            F_List.lv.Items[F_List.lv.Items.Count-1].SubItems.Add('セキュリティ搭載リムーバブルディスク')
          else
            F_List.lv.Items[F_List.lv.Items.Count-1].SubItems.Add('リムーバブルディスク');
        end;
      end;
    end;
  end;
  F_List.ShowModal;
end;
 
end.


Mam's WebSite