ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Detectar Unidade Removível

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
joseadolfojr
Novato
Novato


Registrado: Quarta-Feira, 8 de Agosto de 2007
Mensagens: 71

MensagemEnviada: Qua Ago 08, 2007 2:35 pm    Assunto: Detectar Unidade Removível Responder com Citação

Olá
Alguem sabe como fazer para que uma aplicação detecte un pen-drive quando ele for conectado ao computador?
Grato
Jr
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qua Ago 08, 2007 2:44 pm    Assunto: Responder com Citação

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
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB