Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Cómo obtener el título del cd insertado? (https://www.clubdelphi.com/foros/showthread.php?t=45605)

unreal4u 09-07-2007 00:25:57

Cómo obtener el título del cd insertado?
 
ya, me cansé ... he buscado toda la tarde por esta simple función y simplemente no la encuentro .. he buscado en google, he buscado en los foros, y nada.

Haber, les cuento ...

Necesito listar todos los CD-ROM/DVD-ROM del pc, pero con el respectivo título que en ese momento tenga el cd-rom. (Por ejemplo, si ponemos el DVD de la película "La Roca", que me aparezca "La Roca - [D:]"). Listar las unidades no es ningún problema (ya cerré la ventana, pero estaba aquí en el foro sip :P), pero el problema me viene con la etiqueta de la unidad: en ninguna parte sale cómo obtenerlo :(

Alguien sabe cuál es la función que hace eso? Yo sé que existía una función para eso, pero no logro acordarme cuál es :(

Saludos !!

dec 09-07-2007 00:48:40

Hola,

Creo que puedes usar la función "GetVolumeInformation" del API de Win32. Tienes varios ejemplos de uso en Koders, por ejemplo.

unreal4u 09-07-2007 01:44:30

efectivamente con GetVolumeInformation se puede obtener este dato, aunque la API es un poco complicado .. pero encontré otra página al respecto que lo explica con manzanitas :D

http://www.delphicorner.f9.co.uk/articles/wapi2.htm

ahora mismo estoy leyendo ...

Gracias de todas maneras !!

unreal4u 09-07-2007 21:42:59

Listo !!

Código Delphi [-]
procedure ObtenerInfo;
var
  drive       : char;
  pVolName    : PChar;
  pFSBuf      : PChar;
  SectPerCls,
  BytesPerCls,
  FreeCls,
  TotCls      : DWord;

begin
  for drive := 'A' to 'Z' do
   begin
    if GetDriveType(PChar(drive + ':\')) in [DRIVE_CDROM] then
     begin
      GetMem(pVolName, MAX_PATH);
      GetMem(pFSBuf, MAX_PATH);
      GetVolumeInformation(PChar(drive + ':\'), pVolName, MAX_PATH, nil,
                           SectPerCls, BytesPerCls, pFSBuf, MAX_PATH);
      GetDiskFreeSpace(PChar(drive + ':\'), SectPerCls, BytesPerCls, FreeCls, TotCls);
      if FormatFloat('0.00', (SectPerCls * BytesPerCls * TotCls / 1000000)) = '0.00' then
       Form1.ComboBox1.Items.Add('No hay CD o DVD en [' + drive + ':\]')
      else
       Form1.ComboBox1.Items.Add(PChar(pVolName) + ' - [' + drive + ':\]');

      FreeMem(pVolName, MAX_PATH);
      FreeMem(pFSBuf, MAX_PATH);
     end;
   end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 ComboBox1.Clear;
 ObtenerInfo;
 ComboBox1.DroppedDown := TRUE;
end;

Tan cortito como eso era :D

SS:

Saludos !!

unreal4u 09-07-2007 22:32:13

PD :

lo incluí en el gran programa gran en el cual va, y a la primera ejecución me mandó el error de buffer overflow :mad:

Claro, justo tenía un dvd puesto y al recurrir al dvd, el espacio total era muchisimo más grande que lo que un DWord puede soportar...

Intenté declarar tipo LongWord pero aún así le da un buffer overflow ...

Ahora la pregunta: alguien conoce algún tipo más grande que los que acabo de nombrar ?

Por el momento le desactivé la opción de revisar los overflow, pero me gustaría tenerlo andando bien, yo la verdad me quedé como plop cuando vi que ni siquiera los LongWord eran suficientes ...

Saludos !!


La franja horaria es GMT +2. Ahora son las 00:04:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi