喫茶XRAYトップページ

[スレッド全体
]

[8821] メモリカードスロットのドライブを無視するには返信 削除
2015/5/11 (月) 14:24:55 andy
以下のコードでUSBのドライブを取得していますが
function FillFlashDriveList:string;        //USBのドライブリスト
  const
   NameSize = 4;
   VolumeCount = 26;
   TotalSize = NameSize * VolumeCount;
 var
   Buff, Volume, DosDevice: String;
   lpQuery: array [0..MAXCHAR - 1] of Char;
   I, Count: Integer;
   aa:string;
 begin
  SetLength(Buff, TotalSize);
  Count := GetLogicalDriveStrings(TotalSize, @Buff[1]) div NameSize;
  if Count = 0 then
    RaiseLastOSError
  else
    for I := 0 to Count - 1 do
    begin
      Volume := PChar(@Buff[(I * NameSize) + 1]);
      case GetDriveType(PChar(Volume)) of
        DRIVE_REMOVABLE:
        begin
          Volume[3] := #0;
          QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
          Volume[3] := '\';
          DosDevice := String(lpQuery);
          if (DosDevice <> '\Device\Floppy0') and (DosDevice <> '\Device\Floppy1') then
            if aa='' then aa:=Volume[1] else aa:=aa+','+Volume[1];
        end;
      end;
    end;
  Result:=aa;
 end;

メモリーカードスロットのさしていないドライブを拾ってしまいます。
刺さっていないドライブは無視するようにしたいのですが
なにかいい方法はないでしょうか。
スロットのないパソコンは問題ありません。


[8824] Re:メモリカードスロットのドライブを無視するには返信 削除
2015/5/11 (月) 23:27:11 sato
▼ andyさん

失礼しました。
複数のドライブが取得される場合があるのですね。
  Result:=aa;のあとに
  aa:=aa+':\';
ではなく
for I := 0 to Count - 1 do
の中でDiskSpace=0のドライブを除外ではどうでしょう。

[8826] Re2:メモリカードスロットのドライブを無視するには返信 削除
2015/5/12 (火) 10:02:29 andy
▼ みなさん

どうも、アドバイスありがとうございました。
CreateOleObjectを使って、デバイスを取得して
判別するようにしました。

ずっと、引っかかっていましたが解決することができました。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82