IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Savoir si une clé USB vient d'être insérée


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut Savoir si une clé USB vient d'être insérée
    Bonjour,

    tout est dans le titre je crois !

    A savoir : je voudrais que mon soft détecte l'insertion d'une clé usb sur un port usb et connaître le lecteur affecté.

    Quelqu'un a une idée ?

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    en capturant le message windows avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Procedure WMDeviceChange(Var Mes: TMessage); message WM_DeviceChange;
    Maintenant voir l'aide API Windows pour voir comment ca marche.

    bonne chance et a+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Pas bête !

    je cherche un peu sur google pour assembler tout ça... Pour l'instant ça fonctionne bien avec les CD

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    D'après mes tests, lorsque j'insere une clé USB, la procedure se déclenche et Msg.WParam à la valeur 7. Si ca peut t'aider .

    Ha oui, tu peux utiliser la librairie DBT pour utiliser les constantes associées à WM_DEVICECHANGE (DBT_DEVICEARRIVAL,etc...).

    A+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Merci Portu pour tous ces renseignements. Ca m'a permis de trouver sur le net 8) une fonction toute faite que j'ai adaptée pour mes besoins (merci à michrat sur www.experts-exchange.com).

    Voici la version simplifiée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    unit Main;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,Registry, StdCtrls;
     
    const
      DBT_DEVICEARRIVAL          = $8000;          // system detected a new device
      DBT_DEVICEREMOVECOMPLETE   = $8004;          // device is gone
      DBT_DEVTYP_VOLUME          = $00000002;      // device volume class
     
    type
      PDevBroadcastHdr  = ^DEV_BROADCAST_HDR;
      PDevBroadcastHeader  = PDevBroadcastHdr;
      DEV_BROADCAST_HDR = packed record
        dbch_size: DWORD;
        dbch_devicetype: DWORD;
        dbch_reserved: DWORD;
      end;
     
      PDevBroadcastVolume        =  ^DEV_BROADCAST_VOLUME;
      DEV_BROADCAST_VOLUME      =  packed record
         dbch_size:              DWORD;
         dbch_devicetype:        DWORD;
         dbch_reserved:          DWORD;
         dbcv_unitmask:          DWORD;
         dbcv_flags:             WORD;
      end;
     
    type
      TForm1 = class(TForm)
      private
        procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.WMDeviceChange(var Msg: TMessage); 
    var PHeader : PDevBroadcastHeader; PData : PDevBroadcastVolume; Index : Integer; DriveLetter : char; 
      begin inherited; 
      PHeader:=PDevBroadcastHeader(Msg.lParam); 
      DriveLetter:=#0; 
      case Msg.WParam of 
        DBT_DEVICEARRIVAL : 
          begin 
          if (PHeader^.dbch_devicetype = DBT_DEVTYP_VOLUME) then 
            begin PData:=PDevBroadcastVolume(Msg.lParam); 
            for Index:=0 to 25 do if ((PData^.dbcv_unitmask shr Index) = 1) then begin DriveLetter:=Chr(65+Index); break; end; 
            Application.MessageBox(PChar('Inserted drive letter : '+DriveLetter),'',0);
            end; 
          end; 
        DBT_DEVICEREMOVECOMPLETE: 
          begin 
          if (PHeader^.dbch_devicetype = DBT_DEVTYP_VOLUME) then 
            begin PData:=PDevBroadcastVolume(Msg.lParam); 
            for Index:=0 to 25 do if ((PData^.dbcv_unitmask shr Index) = 1) then begin DriveLetter:=Chr(65+Index); break; end; 
            Application.MessageBox(PChar('Removed drive letter : '+DriveLetter),'',0); 
            end; 
          end; 
        end; 
      end; 
     
    end.

  6. #6
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Un petit résolu alors ??
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Savoir si une valeur donnée vient d'une saisie ou d'une formule
    Par VincentB_log dans le forum Excel
    Réponses: 2
    Dernier message: 30/09/2014, 15h04
  2. Comment savoir si une clé USB est branchée sur le PC
    Par marwal dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2010, 19h20
  3. Réponses: 1
    Dernier message: 13/10/2008, 10h59
  4. [MySQL] Récupérer l'ID d'une entrée qui vient d'être créée
    Par yongblood dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/06/2007, 06h14
  5. Réponses: 2
    Dernier message: 05/06/2006, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo