var x:integer;
driver:pchar;
s:pchar;
begin
s:='g'+':';
driver:=s;
x := GetDrivetype(driver);
if x=5 then  begin
form1.Memo1.Text :=driver+'是光驱'
这是我写的,现在不知道如何才能让程序自已认有几个光驱

解决方案 »

  1.   


    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi][HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0]
    "FirstBusScanTimeInMs"=dword:0000000a
    "DMAEnabled"=dword:00000003
    "Driver"="atapi"[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0]
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Initiator Id 255][HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0]
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0]
    "Identifier"="MAXTOR 4K040H2"
    "Type"="DiskPeripheral"[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 1]
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 1\Logical Unit Id 0]
    "Identifier"="ST320413A"
    "Type"="DiskPeripheral"# 主通道(Scsi Port 0)下的主盘(Target Id 0) 为硬盘 MAXTOR 4K040H2
    # 主通道(Scsi Port 0)下的从盘(Target Id 1) 为硬盘 ST320413A
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1]
    "FirstBusScanTimeInMs"=dword:00000bbc
    "DMAEnabled"=dword:00000001
    "Driver"="atapi"[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0]
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Initiator Id 255][HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 0]
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 0\Logical Unit Id 0]
    "Identifier"="ASUS CD-S500/A"
    "Type"="CdRomPeripheral"
    "DeviceName"="CdRom0"# 从通道(Scsi Port 1)下的主盘(Target Id 0) 为CDROM   ASUS CD-S500/A
    # 从通道(Scsi Port 1)下的从盘(Target Id 1) 为 ........(不存在)
       # 如果有的话它在 HKEY_LOCAL_MACHINE
       \HARDWARE\DEVICEMAP
         \Scsi
           \Scsi Port 1
             \Scsi Bus 0
               \Target Id 1
                 \Logical Unit Id 0
    下的 "Identifier" 键上有设备名
      

  2.   

    var
      a:integer;for i:=65 to 90 do
      begin
        a:=getdrivetype(pchar(i));
        case a of
        begin
          drive_cdrom:showmessage('this is a cd_rom');
        end;
      end;
      

  3.   

    给你一段代码,你可以看看。
    var 
      typ: Integer; 
      s:   string; 
    begin 
      s   := 'c:\'; 
      typ := GetDriveType(PChar(s));
      if Typ <> 0 then case typ of 
          DRIVE_REMOVABLE: 
            begin 
              ShowMessage('Drive Removable / Diskette'); 
            end; 
          DRIVE_FIXED: 
            begin 
              ShowMessage('Drive fixed / Festplatte'); 
            end; 
          DRIVE_CDROM: 
            begin 
              ShowMessage('CD ROM Drive'); 
            end; 
          DRIVE_RAMDISK: 
            begin 
              ShowMessage('RAM Drive'); 
            end; 
          DRIVE_REMOTE: 
            begin 
              ShowMessage('Remote Drive / Netzlaufwerk'); 
            end; 
        end;
    end;
    至于要判断哪几个是光驱,那就用一个循环,从a-z一个个检查。方法就是上面那老兄写的
    我只会瞎说
      

  4.   

    var
      i,DType : integer;
      Driver : String;
    begin  for i := 65 to 90 do
      begin
        Driver := Char(I) + ':';
        DType := GetDriveType(PChar(Driver));
        if DType = Drive_CDRom
        then begin
               Combo.Items.Add('光驱   ' + String(Driver));
             end;
      end;