Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тип CD привода (CD-R/RW,DVD-ROM/R/RW) 
:(
    Опции темы
Andrey S
Дата 10.6.2004, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.6.2004

Репутация: нет
Всего: нет



Добрый день, господа. Подскажите как определить тип CD привода? Можно только под XP.
Буду рад примерам ASPI, ActivX, COM.
PM MAIL   Вверх
Albinos_x
Дата 10.6.2004, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Попробуй функцию
GetDriveType


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
~FoX~
Дата 11.6.2004, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



GetDriveType возвращает:
Цитата

DRIVE_TYPE_UNDTERMINED = 0 -
DRIVE_ROOT_NOT_EXIST = 1    - путь не найден
DRIVE_REMOVABLE = 2              - съемный диск
DRIVE_FIXED = 3                        - винт
DRIVE_REMOTE = 4                    - сетевой
DRIVE_CDROM = 5                      - СиДюк
DRIVE_RAMDISK = 6                  - Виртуальный

И все. exclamation.gif
Я кстати тоже ничего не нашел по этому поводу. mad.gif



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Girder
Дата 11.6.2004, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



1)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom\Enum
2)к примеру SHGetFileInfo и все такое:
Код

Uses ... ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);
var FileInfo: TSHFileInfo;
begin
SHGetFileInfo(PChar('H:\'), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME or SHGFI_TYPENAME);
memo1.Lines.Add(FileInfo.szDisplayName);
memo1.Lines.Add(FileInfo.szTypeName);
end;




--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
<Spawn>
Дата 11.6.2004, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



На ASPI точно можно сделать, но мне щас писать некогда пример smile.gif


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
AVA
Дата 11.6.2004, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 4.6.2004
Где: г. Калуга

Репутация: нет
Всего: нет



Цитата(Girder @ 11.6.2004, 11:27)
1)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom\Enum
2)к примеру SHGetFileInfo и все такое:

Ему надо определить не просто CD а CDRW или DVD или DVDRW...
PM MAIL ICQ   Вверх
Girder
Дата 17.6.2004, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Можно и больше, и проше.
Но я так собрал, можно так сказать: все примеры в одном. (Посмотри еще работу с WMI)
Короче изучай.

Ах да, забыл:
File-New-Application.
Бросаеш на форму Memo и Button.
Модуль заменяеш на представленный ниже.
Цепляеш к обработчике Button.OnClik процедуру Button1Click

Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ActiveX, ComObj;

type
TCD_DVD=(CD,DVD,Virtual_CD_DVD,NoDetect);
TCD_Record=(Disk_Rom,Disk_R,Disk_RW,Disk_NoDetect);
TTypeCD=record
 CD_DVD:TCD_DVD;
 CD_Record:TCD_Record;
end;
TDosDevice=record
 Path:string;
 Vendor:String;
 Product:String;
 Revision:String;
 TypeCD:TTypeCD;
end;
TCDDosDevice=record
 Count:integer;
 CDItems:array of TDosDevice;
end;

const
CLSID_MSDiscMasterObj: TGUID =  '{520CCA63-51A5-11D3-9144-00104BA11C5E}';

type
IDiscRecorder = interface(IUnknown)
 ['{85AC9776-CA88-4cf2-894E-09598C078A41}']
 function Init(pbyUniqueID: pbyte; nulIDSize, nulDriveNumber: ULONG): HResult; stdcall;
 function GetRecorderGUID(var pbyUniqueID: byte; ulBufferSize: ULONG; out pulReturnSizeRequired: ULONG): HResult; stdcall;
 function GetRecorderType(out fTypeCode: Integer): HResult; stdcall;
 function GetDisplayNames(var pbstrVendorID: TBSTR; var pbstrProductID: TBSTR; var pbstrRevision: TBSTR): HResult; stdcall;
 function GetBasePnPID(out pbstrBasePnPID: WideString): HResult; stdcall;
 function GetPath(out pbstrPath: TBSTR): HResult; stdcall;
 function GetRecorderProperties(out ppPropStg: IPropertyStorage): HResult; stdcall;
 function SetRecorderProperties(pPropStg: IPropertyStorage): HResult; stdcall;
 function GetRecorderState(out pulDevStateFlags: ULONG): HResult; stdcall;
 function OpenExclusive: HResult; stdcall;
 function QueryMediaType(out fMediaType: Integer; out fMediaFlags: Integer): HResult; stdcall;
 function QueryMediaInfo(out pbSessions: byte; out pbLastTrack: byte; out ulStartAddress: ULONG; out ulNextWritable: ULONG; out ulFreeBlocks: ULONG): HResult; stdcall;
 function Eject: HResult; stdcall;
 function Erase(bFullErase: boolean): HResult; stdcall;
 function Close: HResult; stdcall;
end;
IEnumDiscRecorders = interface(IUnknown)
 ['{9B1921E1-54AC-11d3-9144-00104BA11C5E}']
 function Next(cRecorders: ULONG; out ppRecorder; out pcFetched: ULONG): HResult; stdcall;
 function Skip(cRecorders: ULONG): HResult; stdcall;
 function Reset: HResult; stdcall;
 function Clone(out ppEnum: IEnumDiscRecorders): HResult; stdcall;
end;
IEnumDiscMasterFormats = interface(IUnknown)
 ['{DDF445E1-54BA-11d3-9144-00104BA11C5E}']
 function Next(cFormats: ULONG; out lpiidFormatID; out pcFetched: ULONG): HResult; stdcall;
 function Skip(cFormats: ULONG): HResult; stdcall;
 function Reset: HResult; stdcall;
 function Clone(out ppEnum: IEnumDiscMasterFormats): HResult; stdcall;
end;
IDiscMasterProgressEvents = interface(IUnknown)
 ['{EC9E51C1-4E5D-11D3-9144-00104BA11C5E}']
 function QueryCancel(out pbCancel: boolean): HResult; stdcall;
 function NotifyPnPActivity: HResult; stdcall;
 function NotifyAddProgress(nCompletedSteps, nTotalSteps: Integer): HResult; stdcall;
 function NotifyBlockProgress(nCompleted, nTotal: Integer): HResult; stdcall;
 function NotifyTrackProgress(nCurrentTrack, nTotalTracks: Integer): HResult; stdcall;
 function NotifyPreparingBurn(nEstimatedSeconds: Integer): HResult; stdcall;
 function NotifyClosingDisc(nEstimatedSeconds: Integer): HResult; stdcall;
 function NotifyBurnComplete(status: HResult): HResult; stdcall;
 function NotifyEraseComplete(status: HResult): HResult; stdcall;
end;
IDiscMaster = interface(IUnknown)
 ['{520CCA62-51A5-11D3-9144-00104BA11C5E}']
 function Open: HResult; stdcall;
 function EnumDiscMasterFormats(out ppEnum: IEnumDiscMasterFormats): HResult; stdcall;
 function GetActiveDiscMasterFormat(out lpiid: TGUID): HResult; stdcall;
 function SetActiveDiscMasterFormat(var riid: TGUID; out ppUnk: IUnknown): HResult; stdcall;
 function EnumDiscRecorders(out ppEnum: IEnumDiscRecorders ): HResult; stdcall;
 function GetActiveDiscRecorder(out ppRecorder: IDiscRecorder):HResult; stdcall;
 function SetActiveDiscRecorder(pRecorder: IDiscRecorder): HResult; stdcall;
 function ClearFormatContent: HResult; stdcall;
 function ProgressAdvise(pEvents: IDiscMasterProgressEvents; out pvCookie: PUINT):HResult; stdcall;
 function ProgressUnadvise(vCookie: PUINT): HResult; stdcall;
 function RecordDisc(bSimulate, bEjectAfterBurn: boolean): HResult; stdcall;
 function Close: HResult; stdcall;
end;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   function GetDosDevice(CDDriveID:integer):string;
   function GetCDDosDevice():TCDDosDevice;
   function TypeCDToStr(TypeCD:TTypeCD):string;
   procedure GetRecorderDrive(CDDevice:TCDDosDevice);
   procedure GetInfoCD_DVD(CDDevice:TCDDosDevice);
 end;

var
 Form1: TForm1;
 CDDosDevice:TCDDosDevice;

implementation

{$R *.dfm}

function TForm1.GetDosDevice(CDDriveID:integer):string;
var
 Buffer : array[0..500] of char;
 TmpPC  : PChar;
 CdCtr:integer;
begin
 CdCtr := 0;
 result := '';
 GetLogicalDriveStrings(SizeOf(Buffer),Buffer);
 TmpPC := Buffer;
  while TmpPC[0] <> #0 do begin
   if Windows.GetDriveType(TmpPC) = DRIVE_CDROM then
       begin
        if CdCtr = CdDriveId then
          begin
            result := TmpPC;
            exit;
          end;
          CdCtr := CdCtr+1;
       end;
   TmpPC := StrEnd(TmpPC)+1;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
memo1.Clear;
CDDosDevice:=GetCDDosDevice;
GetRecorderDrive(CDDosDevice);
GetInfoCD_DVD(CDDosDevice);
if CDDosDevice.Count>0 then
 begin
  i:=0;
  repeat
   memo1.Lines.Add('CDDriveID: '+IntToStr(i));
   memo1.Lines.Add('CDPath: '+CDDOSDevice.CDItems[i].Path);
   memo1.Lines.Add('TypeCD: '+TypeCDToStr(CDDOSDevice.CDItems[i].TypeCD));
   memo1.Lines.Add('Vendor: '+CDDOSDevice.CDItems[i].Vendor);
   memo1.Lines.Add('Product: '+CDDOSDevice.CDItems[i].Product);
   memo1.Lines.Add('Revision: '+CDDOSDevice.CDItems[i].Revision);
   memo1.Lines.Add('');
   inc(i);
  until (i=CDDosDevice.Count);
 end;
end;

procedure TForm1.GetInfoCD_DVD(CDDevice:TCDDosDevice);
Const
IOCTL_STORAGE_GET_MEDIA_TYPES_EX:DWord=$2D0C04;
FILE_DEVICE_8042_PORT:DWord=$00000027;
FILE_DEVICE_ACPI:DWord=$00000032;
FILE_DEVICE_BATTERY:DWord=$00000029;
FILE_DEVICE_BEEP:DWord=$00000001;
FILE_DEVICE_BUS_EXTENDER:DWord=$0000002a;
FILE_DEVICE_CD_ROM:DWord=$00000002;
FILE_DEVICE_CD_ROM_FILE_SYSTEM:DWord=$00000003;
FILE_DEVICE_CHANGER:DWord=$00000030;
FILE_DEVICE_CONTROLLER:DWord=$00000004;
FILE_DEVICE_DATALINK:DWord=$00000005;
FILE_DEVICE_DFS:DWord=$00000006;
FILE_DEVICE_DFS_FILE_SYSTEM:DWord=$00000035;
FILE_DEVICE_DFS_VOLUME:DWord=$00000036;
FILE_DEVICE_DISK:DWord=$00000007;
FILE_DEVICE_DISK_FILE_SYSTEM:DWord=$00000008;
FILE_DEVICE_DVD:DWord=$00000033;
FILE_DEVICE_FILE_SYSTEM:DWord=$00000009;
FILE_DEVICE_FIPS:DWord=$0000003a;
FILE_DEVICE_FULLSCREEN_VIDEO:DWord=$00000034;
FILE_DEVICE_INPORT_PORT:DWord=$0000000a;
FILE_DEVICE_KEYBOARD:DWord=$0000000b;
FILE_DEVICE_KS:DWord=$0000002f;
FILE_DEVICE_KSEC:DWord=$00000039;
FILE_DEVICE_MAILSLOT:DWord=$0000000c;
FILE_DEVICE_MASS_STORAGE:DWord=$0000002d;
FILE_DEVICE_MIDI_IN:DWord=$0000000d;
FILE_DEVICE_MIDI_OUT:DWord=$0000000e;
FILE_DEVICE_MODEM:DWord=$0000002b;
FILE_DEVICE_MOUSE:DWord=$0000000f;
FILE_DEVICE_MULTI_UNC_PROVIDER:DWord=$00000010;
FILE_DEVICE_NAMED_PIPE:DWord=$00000011;
FILE_DEVICE_NETWORK:DWord=$00000012;
FILE_DEVICE_NETWORK_BROWSER:DWord=$00000013;
FILE_DEVICE_NETWORK_FILE_SYSTEM:DWord=$00000014;
FILE_DEVICE_NETWORK_REDIRECTOR:DWord=$00000028;
FILE_DEVICE_NULL:DWord=$00000015;
FILE_DEVICE_PARALLEL_PORT:DWord=$00000016;
FILE_DEVICE_PHYSICAL_NETCARD:DWord=$00000017;
FILE_DEVICE_PRINTER:DWord=$00000018;
FILE_DEVICE_SCANNER:DWord=$00000019;
FILE_DEVICE_SCREEN:DWord=$0000001c;
FILE_DEVICE_SERENUM:DWord=$00000037;
FILE_DEVICE_SERIAL_MOUSE_PORT:DWord=$0000001a;
FILE_DEVICE_SERIAL_PORT:DWord=$0000001b;
FILE_DEVICE_SMARTCARD:DWord=$00000031;
FILE_DEVICE_SMB:DWord=$0000002e;
FILE_DEVICE_SOUND:DWord=$0000001d;
FILE_DEVICE_STREAMS:DWord=$0000001e;
FILE_DEVICE_TAPE:DWord=$0000001f;
FILE_DEVICE_TAPE_FILE_SYSTEM:DWord=$00000020;
FILE_DEVICE_TERMSRV:DWord=$00000038;
FILE_DEVICE_TRANSPORT:DWord=$00000021;
FILE_DEVICE_UNKNOWN:DWord=$00000022;
FILE_DEVICE_VDM:DWord=$0000002c;
FILE_DEVICE_VIDEO:DWord=$00000023;
FILE_DEVICE_VIRTUAL_DISK:DWord=$00000024;
FILE_DEVICE_WAVE_IN:DWord=$00000025;
FILE_DEVICE_WAVE_OUT:DWord=$00000026;
Type
STORAGE_MEDIA_TYPE=(DDS_4mm=$20,MiniQic,Travan,QIC,MP_8mm,AME_8mm,AIT1_8mm,
                    DLT,NCTP,IBM_3480,IBM_3490E,IBM_Magstar_3590,IBM_Magstar_MP,
                    STK_DATA_D3,SONY_DTF,DV_6mm,DMI,SONY_D2,CLEANER_CARTRIDGE,
                    CD_ROM,CD_R,CD_RW,DVD_ROM,DVD_R,DVD_RW,MO_3_RW,MO_5_WO,
                    MO_5_RW,MO_5_LIMDOW,PC_5_WO,PC_5_RW,PD_5_RW,ABL_5_WO,
                    PINNACLE_APEX_5_RW,SONY_12_WO,PHILIPS_12_WO,HITACHI_12_WO,
                    CYGNET_12_WO,KODAK_14_WO,MO_NFR_525,NIKON_12_RW,IOMEGA_ZIP,
                    IOMEGA_JAZ,SYQUEST_EZ135,SYQUEST_EZFLYER,SYQUEST_SYJET,
                    AVATAR_F2,MP2_8mm,DST_S,DST_M,DST_L,VXATape_1,VXATape_2,
                    STK_9840,LTO_Ultrium,LTO_Accelis,DVD_RAM,AIT_8mm,ADR_1,ADR_2,STK_9940);
DEVICE_MEDIA_INFO=record
 Cylinders:LARGE_INTEGER;
 MediaType:STORAGE_MEDIA_TYPE;
 TracksPerCylinder:DWORD;
 SectorsPerTrack:DWORD;
 BytesPerSector:DWORD;
 NumberMediaSides:DWORD;
 MediaCharacteristics:DWORD;
end;
TMediaTypes=record
 DeviceType:DWORD;
 MediaInfoCount:DWORD;
 MediaInfo:DEVICE_MEDIA_INFO;
end;
var H:THandle;
   i,j:integer;
   MediaTypes:TMediaTypes;
   File_Name:String;
   RetSize:DWord;
   OsVerInfo:OSVERSIONINFO;
begin
if CDDevice.Count=0 then exit;
OsVerInfo.dwOSVersionInfoSize:=SizeOf(OsVerInfo);
if (GetVersionEx(OsVerInfo)=false)or(OsVerInfo.dwPlatformId<2) then exit;
i:=0;
repeat
 j:=pos(':',CDDevice.CDItems[i].Path);
 if j>0 then File_Name:='\\.\'+copy(CDDevice.CDItems[i].Path,1,j) else
  File_Name:='\\.\'+CDDevice.CDItems[i].Path+':';
 H:=CreateFile(PChar(File_Name),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,
               OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 if H<>INVALID_HANDLE_VALUE then
  try
   if DeviceIOControl(H,IOCTL_STORAGE_GET_MEDIA_TYPES_EX,nil,0,@MediaTypes,
                      SizeOf(MediaTypes),RetSize,nil) then
    begin
     if mediaTypes.DeviceType=FILE_DEVICE_CD_ROM then
      CDDevice.CDItems[i].TypeCD.CD_DVD:=CD else
      if mediaTypes.DeviceType=FILE_DEVICE_DVD then
       CDDevice.CDItems[i].TypeCD.CD_DVD:=DVD else
       case MediaTypes.MediaInfo.MediaType of
        CD_ROM: begin
                 CDDevice.CDItems[i].TypeCD.CD_DVD:=CD;
                 CDDevice.CDItems[i].TypeCD.CD_Record:=Disk_Rom;
                end;
        CD_R: begin
               CDDevice.CDItems[i].TypeCD.CD_DVD:=CD;
               CDDevice.CDItems[i].TypeCD.CD_Record:=Disk_R;
              end;
        CD_RW: begin
                CDDevice.CDItems[i].TypeCD.CD_DVD:=CD;
                CDDevice.CDItems[i].TypeCD.CD_Record:=Disk_RW;
               end;
        DVD_ROM: begin
                  CDDevice.CDItems[i].TypeCD.CD_DVD:=DVD;
                  CDDevice.CDItems[i].TypeCD.CD_Record:=Disk_Rom;
                 end;
        DVD_R: begin
                CDDevice.CDItems[i].TypeCD.CD_DVD:=DVD;
                CDDevice.CDItems[i].TypeCD.CD_Record:=Disk_R;
               end;
        DVD_RW: begin
                 CDDevice.CDItems[i].TypeCD.CD_DVD:=DVD;
                 CDDevice.CDItems[i].TypeCD.CD_Record:=Disk_RW;
                end;
       else
        CDDevice.CDItems[i].TypeCD.CD_DVD:=NoDetect;
       end;
     if (mediaTypes.DeviceType=FILE_DEVICE_CD_ROM)and
        (MediaTypes.MediaInfo.MediaType in [DVD_ROM,DVD_R,DVD_RW])or
        (mediaTypes.DeviceType=FILE_DEVICE_DVD)and
        (MediaTypes.MediaInfo.MediaType in [CD_ROM,CD_R,CD_RW])then
      CDDevice.CDItems[i].TypeCD.CD_DVD:=Virtual_CD_DVD;
    end// else CDDevice.CDItems[i].TypeCD.CD_DVD:=NoDetect;
  finally
   CloseHandle(H);
  end;
 inc(i);
until (i=CDDevice.Count);
end;

procedure TForm1.GetRecorderDrive(CDDevice:TCDDosDevice);
var pUnknown:IUnknown;
   fDiscMaster:IDiscMaster;
   ppRecorder:IDiscRecorder;
   pcFetched:ULONG;
   pEnumDiscRecorders:IEnumDiscRecorders;
   pbStrPath,Vendor,ProductID,Revision:TBSTR;
   DriveID:Integer;
   typeCode: Integer;
   i:integer;
   sID:string;
begin
try
 pUnknown:=CreateCOMObject(CLSID_MSDiscMasterObj);
 fDiscMaster:=pUnknown as IDiscMaster;
except
 exit;
end;
if Succeeded(fDiscMaster.Open) then
 begin
  if Succeeded(fDiscMaster.EnumDiscRecorders(pEnumDiscRecorders)) then
   while((SUCCEEDED(pEnumDiscRecorders.Next(1, ppRecorder, pcFetched)))
         and(pcFetched = 1))do
    begin
     pbstrPath:=nil;
     Vendor:=nil;
     ProductID:=nil;
     Revision:=nil;
     DriveID:=-1;
     if Succeeded(ppRecorder.GetPath(pbstrPath)) then
      begin
       sID:=trim(OleStrToString(pbstrPath));
       i:=Length(sID);
       while (i>0)and(sID[i] in ['0'..'9']) do dec(i);
       inc(i);
       sID:=copy(sID,i,Length(sID));
       try
        DriveID:=StrToInt(sID);
       except
       end;
       SysFreeString(pbstrPath);
      end;
     if (DriveID<0)or(DriveID>=CDDevice.Count) then
      begin
       DriveID:=CDDevice.Count;
       inc(CDDevice.Count);
       SetLength(CDDevice.CDItems,DriveID);
       CDDevice.CDItems[DriveID].Path:='?';
       CDDevice.CDItems[DriveID].TypeCD.CD_DVD:=NoDetect;
       CDDevice.CDItems[DriveID].TypeCD.CD_Record:=Disk_NoDetect;
       CDDevice.CDItems[DriveID].Vendor:='?';
       CDDevice.CDItems[DriveID].Product:='?';
       CDDevice.CDItems[DriveID].Revision:='?';
      end;
     if Succeeded(ppRecorder.GetRecorderType(typeCode)) then
      case typeCode of
       $1: CDDevice.CDItems[DriveID].TypeCD.CD_Record:=Disk_R;
       $2: CDDevice.CDItems[DriveID].TypeCD.CD_Record:=Disk_RW;
      else
       CDDevice.CDItems[DriveID].TypeCD.CD_Record:=Disk_NoDetect;
      end;
     if Succeeded(ppRecorder.GetDisplayNames(Vendor,ProductID,Revision)) then
      begin
       CDDevice.CDItems[DriveID].Vendor:=OleStrToString(Vendor);
       CDDevice.CDItems[DriveID].Product:=OleStrToString(ProductID);
       CDDevice.CDItems[DriveID].Revision:=OleStrToString(Revision);
       SysFreeString(Vendor);
       SysFreeString(ProductID);
       SysFreeString(Revision);
      end;
    end;
  fDiscMaster.Close;
 end;
end;

function TForm1.TypeCDToStr(TypeCD:TTypeCD):string;
var s:string;
begin                  
case TypeCD.CD_DVD of
 CD: Result:='CD';
 DVD: Result:='DVD';
 Virtual_CD_DVD: Result:='Virtual CD/DVD';
else
 Result:='NoDetect'
end;
case TypeCD.CD_Record of
 Disk_Rom: s:='-Rom';
 Disk_R: s:='-R';
 Disk_RW: s:='-RW';
else
 s:='-?';
end;
Result:=Result+s;
end;

function TForm1.GetCDDosDevice():TCDDosDevice;
var Buffer:array[0..500] of char;
   TmpPC:PChar;
   ID_CD:integer;
begin
ID_CD:=0;
SetLength(Result.CDItems,0);
GetLogicalDriveStrings(SizeOf(Buffer),Buffer);
TmpPC:=Buffer;
while TmpPC[0]<>#0 do
 begin
  if Windows.GetDriveType(TmpPC)=DRIVE_CDROM then
   begin
    SetLength(Result.CDItems,ID_CD+1);
    Result.CDItems[ID_CD].Path:=TmpPC;
    Result.CDItems[ID_CD].Vendor:='?';
    Result.CDItems[ID_CD].Product:='?';
    Result.CDItems[ID_CD].Revision:='?';
    Result.CDItems[ID_CD].TypeCD.CD_DVD:=CD;
    Result.CDItems[ID_CD].TypeCD.CD_Record:=Disk_Rom;
    inc(ID_CD);
   end;
  TmpPC:=StrEnd(TmpPC)+1;
 end;
Result.Count:=ID_CD;
end;

end.



Может быть какие ошибки есть, но ты уж сам отлаживай.

Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Andrey S
Дата 21.6.2004, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.6.2004

Репутация: нет
Всего: нет



Огромное спасибо, Girder!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.