喫茶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;

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


[8823] Re:メモリカードスロットのドライブを無視するには返信 削除
2015/5/11 (月) 22:55:15 sato
▼ andyさん
僭越ながら、
>   Result:=aa;
>  end;
>
> メモリーカードスロットのさしていないドライブを拾ってしまいます。
> 刺さっていないドライブは無視するようにしたいのですが
> なにかいい方法はないでしょうか。
> スロットのないパソコンは問題ありません。


  Result:=aa;のあとに
  aa:=aa+':\';

  GetDiskFreeSpace(PChar(aa), SectPerClstr, BytePerSect, FreeClstr, Clstr);
  DiskSpace := Int64(Clstr) * Int64(BytePerSect) * Int64(SectPerClstr);

  として、当方の場合、カードリーダーだけを繋ぐと DiskSpace=0 でしたので
  メモリーカードの刺さっていないドライブなら「0」になりませんか。

var は
  SectPerClstr, BytePerSect, FreeClstr, Clstr: Cardinal;
  DiskSpace: Int64;
です。

[8827] Re2:メモリカードスロットのドライブを無視するには返信 削除
2015/5/12 (火) 13:05:16 Mr.XRAY
▼ satoさん,どうもです.

そういえば,GetDiskFreeSpace でというのがありました.
思い出しました.Halbow さんの記事にありました.

[第13章 コンボボックス]
http://mrxray.on.coocan.jp/Halbow/Chap13.html


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