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

C++Builder Discussion :

Probleme pour trouver le chemin d'une clef USB detectee automatiquement


Sujet :

C++Builder

  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut Probleme pour trouver le chemin d'une clef USB detectee automatiquement
    Bonjour
    Au cours de mes recherches j'ai trouve comment detecter l'insertion/retrait d'une clef USB
    le lien
    Je n'arrive pas a trouver le Path sous lequel est ouverte cette clef par exemple " H://.... "
    voici les liens qui mon servis
    Cette information est interressante car a partir de la on peut detecter une clef, connaitre son chemin lire les info contenues, savoir si elle est deconnectee

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Je n'ai pas eu trop le temps de me pencher sur le soucis, en revanche, j'ai réalisé un chose similaire en Delphi ...
    Tu peux aller voir ici et en fin de thread (page 5 message 65), je mets les sources ainsi qu'une petite démo ...

    Tu peux t'en inspirer et essayer de le traduire ...
    En espérant avoir pu aider.
    A+

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Merci ero-sennin
    Je vois que tu a eut pas mal de soucis pour parvenir a tes fins, pas evident l'USB!

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Par défaut
    Méthode basique : Lorsque je veux savoir si une clé USB est connectée, je ne cherche pas à détecter l'insertion, je test simplement les lettres des lecteurs.

    Problème : je n'ai pas testé mais je pense par exemple qu'un APN pourrait être détecté en DRIVE_REMOVABLE... à voir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (GetDriveType("D:\\") == DRIVE_REMOVABLE) return true;

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Merci pour ta reponse slylafone, mais ce n'est pas vraiment ce que je cherche.

    Merci ero-sennin
    On peut donc recuperer le numero de disque par ce parametre " dbcv_unitmask ", que l'on cherchait un bit a " 1 " parmi 26 possibilitees avec un decalage, par contre je n'ai pas trouve en BCB l'equivalent de " shr "

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Je pense que l'équivalent du shr de Delphi est >> en C++
    Sauf erreur de ma part, ça devrait être ça

    A+

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Merci ero-sennin
    J'ai bien galere pour recuperer ce fichu numero de lecteur, j'ai utilise une librairie integree a BCB6
    le .cpp
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void   __fastcall   TForm1::GetDeviceChange(TMessage &Msg)
    {
    int a;
    PDEV_BROADCAST_HDR lpdb = PDEV_BROADCAST_HDR(Msg.LParam);
            switch(Msg.WParam)
            {
            case DBT_DEVICEARRIVAL: // on a detecte l'insertion d'un nouveau periferique
                    if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
                    {
                    PDEV_BROADCAST_VOLUME lpdbv = PDEV_BROADCAST_VOLUME(lpdb);
                    // calcul du numero de lecteur attribue
                    ULONG mask = (lpdbv->dbcv_unitmask);
                            CHAR i;
                            for (i = 0; i < 26; ++i)
                            {
                            if (mask & 0x1)
                            break;
                            mask = mask >> 1;
                            }
                            a = (i + 'A');
                            //Label1->Caption = char(a);
                    }
                    ShowMessage(AnsiString("Peripherique USB connecte  : ") + char(a)) ;
            break;
            case DBT_DEVICEREMOVECOMPLETE: // on a detecte le retrait d'un periferique
                    if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
                    {
                    PDEV_BROADCAST_VOLUME lpdbv = PDEV_BROADCAST_VOLUME(lpdb);
                    // calcul du numero de lecteur attribue                
                    ULONG mask = (lpdbv->dbcv_unitmask);
                            CHAR i;
                            for (i = 0; i < 26; ++i)
                            {
                            if (mask & 0x1)
                            break;
                            mask = mask >> 1;
                            }
                            a = (i + 'A');
                            //Label1->Caption = char(a);
                    }
                    ShowMessage(AnsiString("Peripherique USB deconnecte  : ") + char(a)) ;
            break;
            }
    }
    //---------------------------------------------------------------------------
    le .h
    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
     
    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <dbt.h> // ne pas oublier d'inserer
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
    private: // User declarations
    public:  // User declarations
            __fastcall TForm1(TComponent* Owner);
    // module de detection des messages
            void   __fastcall   TForm1::GetDeviceChange(TMessage &Msg);
            BEGIN_MESSAGE_MAP
                    MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,GetDeviceChange)
            END_MESSAGE_MAP(TForm)
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Juste pour apporter une petite simplification à ton code, avec une méthode qui renvoie un char, mask est donné en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(int i=0, ...)
        {
        if(mask & 1) return (char)('A' + i);
        // BCB sait faire >> 1 (SHR) même quand on lui donne /2
        mask = mask / 2; 
        }
    // aucun dispositif (ça devrait être assez rare... compte tenu que...)
    return 0;
    A plus !

Discussions similaires

  1. Réponses: 22
    Dernier message: 10/03/2011, 09h43
  2. Réponses: 9
    Dernier message: 08/08/2009, 23h32
  3. Probleme pour recuperer le HDEVINFO d'une clef USB
    Par blondelle dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/07/2008, 21h11
  4. probleme pour recuperer le chemin du dossier courant
    Par HoB dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/08/2007, 11h22
  5. Probleme pour trouver une requete
    Par scrat57000 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/06/2007, 12h49

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