Cita:
Empezado por seoane
Al codigo anterior todavia le podemos dar otra vuelta de tuerca, si tenemos una lista de las unidades que hay en cada momento sera muy sencillo saber cual es la que se acaba de insertar.
Código Delphi [-]
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
Lista: set of Char;
procedure CrearLista;
procedure WMDEVICECHANGE(var Msg: TMessage); message WM_DEVICECHANGE;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
DBT_DEVICEARRIVAL = $8000;
procedure TForm1.CrearLista;
var
Letra: Char;
begin
Lista:= [];
for Letra:= 'C' to 'Z' do
if GetDriveType(Pchar(Letra+':\')) = DRIVE_REMOVABLE then
Lista:= Lista + [Letra];
end;
procedure TForm1.WMDEVICECHANGE(var Msg: TMessage);
var
Letra: Char;
begin
if Msg.WParam = DBT_DEVICEARRIVAL then
begin
for Letra:= 'C' to 'Z' do
if GetDriveType(Pchar(Letra+':\')) = DRIVE_REMOVABLE then
begin
if not (Letra in Lista) then
begin
ShowMessage('Este es un disco removible '+Letra+':\');
end;
end;
end;
CrearLista;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CrearLista;
end;
Perdon por poner dos respuestas, pero se me van ocurrinedo ideas sobre la marcha
|
Varios años después le podemos dar una vuelta mas a la tuerca, en realidad una pequeña corrección.
Así como estaba el evento TForm1.WMDEVICECHANGE, no mostraba nada cuando se insertaba un disp. USB, con este pequeñísimo arreglito va mejor.
Pongo en rojo las modificaciones.
Ah, para que fuera mas gráfico, le puse un listbox donde aparecen y desaparecen las unidades USB.
Código Delphi
[-]
type
TForm1 = class(TForm)
lst1: TListBox;
procedure FormCreate(Sender: TObject);
private
Lista: set of Char;
procedure CrearLista;
procedure WMDEVICECHANGE(var Msg: TMessage); message WM_DEVICECHANGE;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
DBT_DEVICEARRIVAL = $8000;
DBT_DEVICEREMOVAL = $8004;
procedure TForm1.CrearLista;
var
Letra: Char;
begin
Lista:= [];
lst1.Clear;
for Letra:= 'C' to 'Z' do
begin
if GetDriveType(Pchar(Letra+':\')) = DRIVE_REMOVABLE then
begin
Lista:= Lista + [Letra];
lst1.Items.Add(Letra + ':\');
end;
end;
end;
procedure TForm1.WMDEVICECHANGE(var Msg: TMessage);
var
Letra: Char;
begin
if Msg.WParam = DBT_DEVICEARRIVAL then
begin
for Letra:= 'C' to 'Z' do
begin
if GetDriveType(Pchar(Letra + ':\')) = DRIVE_REMOVABLE then
begin
if not (Letra in Lista) then
begin
ShowMessage('Este es un disco removible ' + Letra + ':\');
end;
end;
end;
CrearLista;
end;
if Msg.WParam = DBT_DEVICEREMOVAL then
begin
CrearLista;
end;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CrearLista;
end;
end.
Gracias. Este código, junto con otros que encontré me sirvieron de mucho.
Saludos.