Thought this might be useful to somebody. It will return the drive letter of the first available CD-ROM drive to the console.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
classes,
Unit1 in 'Unit1.pas';
var
envlist: TStringList;
i: integer;
begin
writeln(getcd(getdisks)+':');
end.
unit Unit1;
interface
uses classes, sysutils, windows;
function GetCD(availdisks: string): string;
function GetDisks:string;
implementation
function GetCD(availdisks: string): string;
var
i :integer;
root :pchar;
begin
result:=chr(0);
root:=stralloc(255);
for i:=1 to length(availdisks) do
begin
strpcopy(root,copy(availdisks,i,1)+':\');
if getdrivetype(root)=drive_cdrom then
begin
result:=availdisks[i];
break;
end;
end;
strdispose(root);
end;
function GetDisks:string;
var
availdisks: string;
i,n :integer;
buf :pchar;
begin
buf:=stralloc(255);
n:=GetLogicalDriveStrings(255,buf);
availdisks:='';
for i:=0 to n do
if buf[i]<>#0 then begin
if (ord(buf[i]) in [$41..$5a]) or (ord(buf[i]) in [$61..$7a]) then
availdisks:=availdisks+upcase(buf[i])
end else
if buf[i+1]=#0 then
break;
strdispose(buf);
result:=availdisks;
end;
end.