Ver Mensaje Individual
  #2  
Antiguo 08-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola, en mi página, en la sección de componentes, puedes encontrar una que se llama TCDChange. Esta componente detecta cuando se inserta o extrae un CD.

Ahora bien, en el código de detección (unidad CdChange.pas), encontrarás:

Código Delphi [-]
procedure TCdChange.WndProc(var Msg: TMessage);
var
  Drive: Char;

begin
  if Msg.Msg = WM_DEVICECHANGE then
    with TWMDeviceChange(Msg) do
      if
        ((Event = DBT_DEVICEARRIVAL) or (Event = DBT_DEVICEREMOVECOMPLETE)) and
        (Header.DeviceType = DBT_DEVTYP_VOLUME) and
        (PDevBroadcastVolume(Header).Flags and DBTF_MEDIA <> 0)
      then
      begin
        Drive := GetDriveFromMask(PDevBroadcastVolume(Header).UnitMask);

        case Event of
          DBT_DEVICEARRIVAL:
            if Assigned(FOnCdInserted) then FOnCdInserted(Self, Drive);

          DBT_DEVICEREMOVECOMPLETE:
            if Assigned(FOnCdRemoved) then FOnCdRemoved(Self, Drive);
        end;
      end;
end;

Si omites la condición marcada en rojo, entonces también detectará las memorias usb, al menos detecta la mía . Claro que entonces seguirá detectando los cd. Quizá evites esto si en lugar de omitir la condición, la cambias a = 0.

// Saludos
Responder Con Cita