1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| 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. |
Partager