Ver Mensaje Individual
  #5  
Antiguo 27-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Reputación: 20
cHackAll Va por buen camino
Cool Solucion

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;      { system detected a new device }
 DBT_DEVTYP_VOLUME = $00000002;                { logical volume }
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  // Si quieres darle a una EEPROM cambia a "(dbcv_flags = 0)"
     begin
      Drive := '@';
      UnitMask := dbcv_unitmask;                                        //
      repeat Inc(Drive);
       UnitMask := UnitMask shr 1;
      until UnitMask = 0;
      WinExec(PChar('cmd /kdir ' + Drive + ':'), 0);                    // 'Drive' is your business 
     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?
Responder Con Cita