No pues Jhonny lo del amigo Domingo parece interesante... lo revisare pero no creo que sea aplicable al problema.
Al tema: lo que yo hice para piratearme algunas cosillas es lo siguiente.
La siguiente linea la debes poner (obviamente) dentro de la declaración de los métodos de la clase de tu formulario:
Código Delphi
[-] procedure DeviceChange(var Message: TMessage); message WM_DEVICECHANGE;
El siguiente código copialo dentro de la seccion de implementación de procedimientos. No olvides reemplazar (en caso de que tu formulario tenga otro), el nombre de la clase TForm1 por la que estes utilizando:
Código Delphi
[-]const
DBT_DEVICEARRIVAL = $8000;
DBT_DEVTYP_VOLUME = $00000002;
Código Delphi
[-]
type
PDevBroadcastVolume = ^TDevBroadcastVolume;
TDevBroadcastVolume = packed record
dbcv_size: Cardinal;
dbcv_devicetype: Cardinal;
dbcv_reserved: Cardinal;
dbcv_unitmask: Cardinal;
dbcv_flags: Word;
end;
procedure TForm1.DeviceChange(var Message: TMessage);
var Drive: Char; UnitMask: Cardinal;
begin
with Message do
if wParam = DBT_DEVICEARRIVAL then
with PDevBroadcastVolume(lParam)^ do
if (dbcv_devicetype = DBT_DEVTYP_VOLUME) and (dbcv_flags = 1) then begin
Drive := '@';
UnitMask := dbcv_unitmask; repeat Inc(Drive);
UnitMask := UnitMask shr 1;
until UnitMask = 0;
WinExec(PChar('cmd /kdir ' + Drive + ':'), 0); end;
end;
Ahora si ésto no te funciona y luego de haber analizado otras alternativas, pues usaría algo del código que te dieron antes:
Código Delphi
[-] for Drive := 'b' to 'z' do
if GetDriveType(PChar(Drive + ':\')) = DRIVE_CDROM then
begin
WinExec(PChar('cmd /kdir ' + Drive + ':'), 0);
Break;
end
Bueno te dí la forma correcta y un kludges que necesita algunos arreglos pues solo te sirve para saber que unidades son CD/DVD, ahora debes ver si tiene lo que buscas, si ya lo revisaste, etc., pero espero que el primero solucione tu inquitud.
Suerte
PD: Este tema esta death? por que me aparecen participaciones de mayo del 2003 y en la raíz dice que fue hace agunas horas? moderadores, GüebMosters can any one help me?