TSMH’s blog

多趣味人間のメモ

ドライブの取得

システムで有効なドライブを列挙したいと思います。

目次

ユニットファイル

uses  Windows;
(Win32API 使います

処理

procedure TForm1.FormCreate(Sender: TObject);
var
  LogDrives    :  Cardinal;
  i                   :  Integer;
  DriveName  :  String;
begin
  LogDrives := GetLogicalDrives;  //有効なドライブの情報を取得

  for i := 0 to 25 do  //A→Zのループ
      begin
        if (LogDrives and (1 shl i)) <> 0 then
          begin
            DriveName := Char(Ord('A') +i) + ':\';
            if GetDriveType(PChar(DriveName)) = DRIVE_REMOVABLE then
              begin
                Memo1.Lines.Add(DriveName);  //メモに追加
              end;
          end;
      end;
  end;

参考

GetDriveTypeA function (fileapi.h) - Win32 apps | Microsoft Docs

[ 085_CR-ROM ドライブの検出とトレーの開閉 ] - Mr.XRAY

GetDriveType

補充

GetDriveTypeの戻り値について

0    ドライブの種類が判定できない。または、RootPathNameの指定が誤っている。
1    指定されたドライブは存在しない。
DRIVE_REMOVABLE   ドライブはリムーバブルディスク用。//USBなど
DRIVE_FIXED              ドライブは固定ディスク用。//Cドライブ
DRIVE_REMOTE          ネットワークドライブ。
DRIVE_CDROM           CD-ROMドライブ。
DRIVE_RAMDISK         RAMディスク。