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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    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 : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    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 éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    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 : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    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 éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    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 Expert
    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
    Par défaut
    Un petit résolu alors ??

+ 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