johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qua Ago 08, 2007 2:44 pm Assunto: |
|
|
Amigo tenta isto aqui...
unit USB_D;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PDEV_BROADCAST_HDR = ^TDEV_BROADCAST_HDR;
TDEV_BROADCAST_HDR = packed record
dbch_size : DWORD;
dbch_devicetype : DWORD;
dbch_reserved : DWORD;
end;
PDEV_BROADCAST_VOLUME = ^TDEV_BROADCAST_VOLUME;
TDEV_BROADCAST_VOLUME = packed record
dbcv_size : DWORD;
dbcv_devicetype : DWORD;
dbcv_reserved : DWORD;
dbcv_unitmask : DWORD;
dbcv_flags : WORD;
end;
type
TForm1 = class(TForm)
Memo1: TMemo;
private
{ Déclarations privées }
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
GetLettre : string;
implementation
{$R *.dfm}
///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
//
// Detecter la Connection/Déconnection de périphériques USB de stockage "STORAGE"
// Mém FLASH, HDD , Mém app photo , MP3...
//
// Rylou 27/01/2005 21:44
//
///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// Capture Evenement windows "WMDeviceChange"
procedure TForm1.WMDeviceChange(var Msg: TMessage);
var
VolName, FileSysName : Array[0..Max_Path]Of Char;
VolSerial, FileMaxLen, FileFlags : DWord;
S : string;
begin
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// TESTER si DBT_DEVICEARRIVAL = $8000
// si oui, ne traiter que les périphériques de stockage de type 0=DeviceTypeOEM
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
if Msg.wParam =$8000 then begin
if PDEV_BROADCAST_HDR( Msg.LParam )^.dbch_devicetype <>2 then exit;
if PDEV_BROADCAST_VOLUME( Msg.LParam )^.dbcv_flags <>0 then exit;
// A partir d'ici vous pouvez mettre votre code a executer en cas
// de connection d'un peripherique de stockage USB.
// Vous pouvez aussi par exemple comparer le "Non de volume"
// de ce péripphérique pour affiner le declenchement.
//Affiche dans le textbox les infos du periphérique connécté (pour l'exemple)
S := 'Connection du périphérique !' +#13+#10+#13+#10;
// Sa lettre "DeviceID"
str(ln(PDEV_BROADCAST_VOLUME( Msg.LParam )^.dbcv_unitmask)/ln(2)+Ord('A'):2:0,GetLettre);
S := S + 'DeviceID :'+#9+#9+ char(strtoint(GetLettre)) + ':\' + #13+#10;
// NomVolume + SySfichier + N° serie du periphérique
If GetVolumeInformation(pchar(char(strtoint(GetLettre))+':\'),VolName,Max_Path,@VolSerial,
FileMaxLen, FileFlags,FileSysName,Max_Path)
Then S := S +'Nom du Volume :' +#9+#9+ VolName
+#13+#10'Système de fichiers :' +#9+ FileSysName
+#13+#10'Numéro de série :' +#9+#9+ IntToStr(VolSerial)+#13+#10;
// Taille et free espace du periphérique
S := S + 'Taille totale :' +#9+#9+ FloatToStrF(DiskSize(strtoint(GetLettre)-64)div 1024, ffNumber, 18, 0) + ' Kilo-octets' + #13+#10;
S := S + 'Disponible :' +#9+#9+ FloatToStrF(DiskFree(strtoint(GetLettre)-64) div 1024, ffNumber, 18, 0) + ' Kilo-octets';
memo1.text:=S;
beep; // Envoi un beep sonore a la connection
end; // Fin de traitement "connection periphérique"
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// TESTER si DBT_DEVICEREMOVECOMPLETE = $8004
// si oui, ne traiter que les périphériques de stockage de type 0=DeviceTypeOEM
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
if Msg.wParam =$8004 then begin
if PDEV_BROADCAST_HDR( Msg.LParam )^.dbch_devicetype <>2 then exit;
if PDEV_BROADCAST_VOLUME( Msg.LParam )^.dbcv_flags <>0 then exit;
// A partir d'ici vous pouvez mettre votre code a executer en cas
// de déconnection d'un peripherique de stockage USB.
// Affiche dans le textbox le periphérique déconnécté (pour l'exemple)
S := 'Déconnection du périphérique !' +#13+#10+#13+#10;
// Sa lettre "DeviceID"
str(ln(PDEV_BROADCAST_VOLUME( Msg.LParam )^.dbcv_unitmask)/ln(2)+Ord('A'):2:0,GetLettre);
S := S + 'DeviceID :' +#9+#9+ char(strtoint(GetLettre)) + ':\' + #13+#10;
memo1.text:=S;
beep; // Envoi un beep sonore a la déconnection
end; // Fin de traitement "déconnection periphérique"
end;
end.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|