如何从驱动器阵列中排除虚拟驱动器

时间:2011-03-28 16:54:36

标签: delphi delphi-7

我得到了一系列我在计算机中获得的所有驱动程序然后我得到了他们的类型以排除CD驱动器但我想删除虚拟驱动器,因为我返回真正的CD驱动器和虚拟驱动器(作为闪存,USB ...)?

2 个答案:

答案 0 :(得分:2)

Sara,我想你的真正问题是什么,我如何确定CD-ROM(或任何)驱动器何时是虚拟驱动器?所以这个问题的答案是:虚拟驱动器的工作和行为就像物理CD / DVD驱动器一样,没有任何属性可以将驱动器标识为虚拟,因为据我所知,不存在任何可靠方法来确定驱动器何时是虚拟的。对您而言唯一可能的解决方案是创建与虚拟驱动器关联的SCSIIDE驱动程序(类似字典)的列表(包含 Virtual CloneDrive 等字符串)然后,您可以获取与CDROM驱动器关联的关联SCSI或IDE控制器,并在虚拟驱动器控制器列表中搜索,以确定驱动器是否为虚拟驱动器。

答案 1 :(得分:0)

我不确定这是否会有所帮助,但作为替代方案,您可以尝试测试驱动器是否准备就绪。如果没有准备好,空CD和空USB设备将返回false。这是从列表中删除未准备好的驱动器的好方法。

function IsDriveReady( const ADrive: string ): boolean;
{ Checks if a local drive is ready. Drive must be a valid local drive (A:\ to Z:\). }
var
  ErrorMode: word; // current error mode
  DriveNum: integer; // zero based number of drive
begin
  Result := False;
  // Get zero based drive number
  DriveNum := GetDriveNumber( ADrive );
  if DriveNum = -1 then
    exit;
  ErrorMode := Windows.SetErrorMode( Windows.SEM_FAILCRITICALERRORS );
  try
    // DiskSize requires 1 based drive numbers
    // returns -1 for invalid drives
    if SysUtils.DiskSize( DriveNum + 1 ) <> -1 then
      Result := True;
  finally
    Windows.SetErrorMode( ErrorMode );
  end;
end;