From: "Chris Rankin" <RankinC@Logica.com>
Vincent Oostindie <vincent.oostindie@tip.nl> wrote > * How do I get the unique number from an audio CD in the CD-ROM drive?
const MCI_INFO_PRODUCT = $00000100; MCI_INFO_FILE = $00000200; MCI_INFO_MEDIA_UPC = $00000400; MCI_INFO_MEDIA_IDENTITY = $00000800; MCI_INFO_NAME = $00001000; MCI_INFO_COPYRIGHT = $00002000; { parameter block for MCI_INFO command message } type PMCI_Info_ParmsA = ^TMCI_Info_ParmsA; PMCI_Info_ParmsW = ^TMCI_Info_ParmsW; PMCI_Info_Parms = PMCI_Info_ParmsA; TMCI_Info_ParmsA = record dwCallback: DWORD; lpstrReturn: PAnsiChar; dwRetSize: DWORD; end; TMCI_Info_ParmsW = record dwCallback: DWORD; lpstrReturn: PWideChar; dwRetSize: DWORD; end; TMCI_Info_Parms = TMCI_Info_ParmsA;
These are the buffers you want: the identifier is returned as a string of decimal digits by the MCI_INFO_MEDIA_IDENTITY function. You should be able to cross-reference this with the online help (Win32 and TMediaPlayer component).
From: Christian Piene Gundersen <j.c.p.gundersen@jusstud.uio.no>
ClaWenkel wrote: > > Is there any API command in Delphi2 to eject AND CLOSE the CD-ROM Drive > physically e.g. by clicking on a button? I don't want to use the > TMediaPlayer component (which can only eject...) > thanks in advance, ClaWenkel
To open the CD-ROM:
mciSendString('Set cdaudio door open wait', nil, 0, handle);
To close the CD-ROM:
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
Remember to include the MMSystem unit in your uses clause.
From: "Jason Wallace" <DarkElf@SLSoftware.reno.nv.us>
GetCD_ID returns the serial number of the CD (as CDPLAYER.EXE does...)
GetCD_Label returns the label of the CD (which will either be a "DOS label", 'AUDIO CD' or 'No CD Present'
FindFirstCDROM returns the first CD Rom it finds (for instance 'D:\') -- it uses the ListDrives function (which returns a TStringList of all available drives on a given PC....)
As for the rest: Win95 uses AutoPlay which, if it's label is 'AUDIO CD' automatically starts the CD player, or if it returns a "DOS Label" it looks for the file 'Autorun.ini" (or .Inf (always forget which...)) and goes from there (take a look in that file. 90% of the time you'll see 'OPEN = xxxxx' (where xxx is the file Autoplay starts when the CD is inserted and 'ICON = xxxxx' which is the icon Autoplay will use..)
function GetCD_ID(WhichDrive: string): string; var VolumeName : array[0..255] of char; FileSystemType : array[0..255] of char; SerialNum : DWORD; MaxFilenameLength : DWORD; Flags : DWORD; begin if (GetVolumeInformation(PChar(WhichDrive), VolumeName, 256, @SerialNum, MaxFilenameLength, Flags, FileSystemType, 256)) then Result := (IntToHex(SerialNum shr 16, 3) + IntToHex((SerialNum shl 16) shr 16, 4)); end; function GetCD_Label(WhichDrive: string): string; var VolumeName : array[0..255] of char; FileSystemType : array[0..255] of char; SerialNum : DWORD; MaxFilenameLength : DWORD; Flags : DWORD; begin Result := 'No CD Present'; if (GetVolumeInformation(PChar(WhichDrive), VolumeName, 256, @SerialNum, MaxFilenameLength, Flags, FileSystemType, 256)) then Result := VolumeName; end; function FindFirstCDROM: shortstring; var AList : TStringList; Counter : integer; begin Result := 'no CDROM present'; AList := TStringList.Create; ListDrives(AList); for Counter := 0 to AList.Count-1 do if GetDriveType(PChar(Alist.Strings[Counter])) = DRIVE_CDROM then Result := Alist.Strings[Counter] end; procedure ListDrives(Strings: TStringList); const BufSize = 256; var Buffer : PChar; P : PChar; begin GetMem(Buffer, BufSize); try Strings.BeginUpdate; try Strings.Clear; if GetLogicalDriveStrings(BufSize, Buffer) <> 0 then begin P := Buffer; while P^ <> #0 do begin Strings.Add(P); Inc(P, StrLen(P) + 1); end; end; finally Strings.EndUpdate; end; finally FreeMem(Buffer, BufSize); end; end;