Newsgroup: it.comp.lang.delphi
Titolo: path del lettore cd

come faccio da un'applicazione a sapere qual'č il path del lettore cd??? mi
spiegop potre usare la shellexecute e lanciare un progra ma su d: ma se per
caso sul computer ci sono piů hard disk non trovo il lettore cd ma il
secondario, non c'č un posto dove posso trovare il path esatto del lettore
cd????
grazie ciao
--
Roberto Gibertini
TOGLIMIrober...@email.it
Home page personale (che fa schifo ma non mi va di metterci le mani)
http://digilander.iol.it/scionn/
Home page del NG free.it.vegetarianesimo
http://digilander.iol.it/fiveg

 cd????
Devi utilizzare GetLogicalDriveStrings() per ottenere la lista delle unità
logiche, poi con GetDriveType() capisci se si tratta di un drive ottico
(CD/DVD/MASTERIZZATORE)
Saluti
--
- Carlo -
c.b...@libero.it
http://members.fortunecity.it/cbertu

>>>>>Devi utilizzare GetLogicalDriveStrings() per ottenere la lista delle
unità
logiche, poi con GetDriveType() capisci se si tratta di un drive ottico
(CD/DVD/MASTERIZZATORE)<<<<<
scusami se non so utilizzare un così rapido e prezioso aiuto, ma come devo
fare per prendermi la lista, che capperino di variabile ci devo mettere come
buffer???
scusa ancora se ti faccio perdere tempo e grazie mille per la velocissima
risposta.


 buffer???
visto che non hai praticità con le funzioni dell'API di Windows ti consiglio
di utilizzare una funzione semplice come la seguente.
Var Conta : Char;
begin
  For Conta:='A' to 'Z' do begin
    If GetDriveType((Pchar(Conta+':\')))=DRIVE_CDROM then
    ShowMessage(Pchar(Conta+':\')+' periferica CD/DVD/MASTERIZZATORE');
  end;
end;
Ciao! :-)


>>>>>Var Conta : Char;
begin
  For Conta:='A' to 'Z' do begin
    If GetDriveType((Pchar(Conta+':\')))=DRIVE_CDROM then
    ShowMessage(Pchar(Conta+':\')+' periferica CD/DVD/MASTERIZZATORE');
  end;
end;<<<<<
grazie mille utilizzerň sicuramente questo sistema, ma mi potresti
ugualmente dire cpme andava fatto con l'altra funzione dell'api, cosě almeno
lo imparo.
gerazie mille ciao


 lo imparo.
In generale quando chiami una funzione da cui ti aspetti il riempimento
di una stringa (come GetLogicalDriveStrings) devi passare un puntatore
ad una zona di memoria dove sia sicuro, da parte della funzione
chiamata, scrivere.
Normalmente, tale parametro e' di tipo LPTSTR (nella documentazione
win32 in mio possesso), cioe' puntatore (long) a stringa. Dato che le
stringhe C sono diverse dalle AnsiString (quelle di OP), uno dei modi
piu' rapidi per -alla fine- ottenere delle string e' utilizzare un array
di caratteri (allocato staticamente o dinamicamente) e passare quello
alla funzione.
es:
function GetFirstCdDrive: string;
var
  drvBuf: array[0..128] of char;
  i, drvbuflen: integer;
begin
  Result := '';
  drvbuflen := 128;
  GetLogicalDriveStrings(drvbuf, drvbuflen);
  i := 0;
  while (drvbuf[i] <> #0) and (Result = '') do begin
    if GetDriveType(@drvbuf[i]) = DRIVE_CDROM then
      Result := copy(drvbuf, i, 3)
    else begin
      while(drvbuf[i] <> #0) do inc(i);
      inc(i);
    end;
  end;
end;
Volendo far le cose per bene, potresti fare 2 chiamate alla funzione; la
prima con nil e drvbuflen = 0; drvbuflen := GetLogicalDriveStrings(nil,
0); a questo punto allochi solo la mem che ti serve e ri-chiami la
funzione.
Saluti
Paolo Arosio

 lo imparo.
Paolo mi ha bruciato sul tempo. Non ho nulla da aggiungere a quanto da lui
scritto
Saluti
