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

MFC Discussion :

Implémenter la récuperation de message windows


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut Implémenter la récuperation de message Windows
    Bonjour,

    Je voudrai detecter le plug/deplug d'une cle USB.
    Pour cela, il suffit apparament de recuperer le message windows WM_DEVICECHANGE, mais j'arrive pas a implementer le truc pour recuperer ce message.

    Dans la MSDN j'ai trouver ceci:
    The WM_DEVICECHANGE device message notifies an application of a change to the hardware configuration of a device or the computer.

    Et ces fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD_PTR dwData);
     
    LRESULT CALLBACK WindowProc(
      HWND hwnd,       // handle to window
      UINT uMsg,       // message identifier
      WPARAM wParam,   // device-change event
      LPARAM lParam    // event-specific data
    );
    Seulement j'y comprend rien. Ma classe est une CFormView.
    Je pensai juste que je devais surcharger ces fonctions dans ma classe mais je ne rentre jamais dans ces fonctions(je test en mettant et retirant une cle usb, pas tester avec le DD).

    J'ai pas compris la doc ou bien?

    Merci
    [Edit:05/03/07] Juste pour etre un peu plus clair

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Par défaut
    As tu essayer d'intercepter WM_DEVICECHANGE à l'aide de ClassWizard ?
    Ca devrait générer automatiquement la fonction OnDeviceChange() ... je crois

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Salut,

    Oui mais comment faire? je suis sous Visual 2005 et il n'y a pas de class Wizard, c'est pour ca que j'ai essayer de le faire a la main mais ca marche pas:

    J'ai ajoute cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // .h
    afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD_PTR dwData);
    // .cpp
    BOOL OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
    {
    return TRUE;
    }
    Ca compile, mais je ne passe jamais dans cette fonction.

    Si j'ajoute ceci dans la declaration des messages:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON_MESSAGE(WM_DEVICECHANGE, &CMainView::OnDeviveChange)
    Ca ne compile pas, voici l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    error C2440: 'static_cast' : cannot convert from 'BOOL (__thiscall CMainView::* )(UINT,DWORD_PTR)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'
            Cast from base to derived requires dynamic_cast or static_cast
    Comment on ajoute de nouveau message?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Juste un petit up, car je suis toujours bloquer.

    Concernant les messages, je pense que je fais bien ce qu'il faut mais je comprend pas pourquoi j'arrive pas recuperer le message.

    Comment fais-t-on pour savoir si le message est bien envoyer par windows?
    Ou alors j'essaie de recuperer le mauvais message mais bon dans la msdn il y a bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MFC Library Reference  
    CWnd::OnDeviceChange
    The framework calls this member function to notify an application or device driver of a change to the hardware configuration of a device or the computer.
    Toute indice serait le bienvenu(meme simple ou evident)
    Merci

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Pour visualiser les messages j'utilise Spy++ présent dans les tools de Visual Studio

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Ben oui, c'est pas compliquer mais pourquoi ca marche pas...
    Pourtant je fais tout bien comme il faut il me semble.

    Voici mon .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public:
    afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD_PTR dwData);
    Voici mon .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BEGIN_MESSAGE_MAP(CMainView, CFormView)
    	ON_WM_DEVICECHANGE()
    END_MESSAGE_MAP()
     
    BOOL CMainView::OnDeviceChange(UINT nEventType, DWORD dwData)
    {
    	BOOL bResult = TRUE;
     
    	return bResult;
    }
    Je met des points d'arrets dans la fonction, j'execute je met une cle usb rien je l'enleve rien je la remet, rerien... pourtant ca devrait je comprend pas que ca marche pas!


    Et je comprend pas que dans la msdn:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    afx_msg void OnDeviceChange( UINT, DWORD );
    Et lorsque je clic sur le lien j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    afx_msg BOOL OnDeviceChange(
       UINT nEventType,
       DWORD_PTR dwData 
    );
    J'ai quand meme tester avec ce prototypage(void OnDevice), rien...

    Je sais plus quoi faire.

    Pour info, j'ai fait la meme chose avec le message WM_PAINT(OnPaint) juste pour tester(j'en ai pas besoin) et ca marche bien, je passe dans OnPaint()

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Je regarde Spy.

    Aussi je sais pas si ca y fait quelque chose(mais au point ou j'en suis):
    Systeme: XP
    Visual: Visual C++ 2005 Entreprise
    Projet avec les MFC
    Ecran 17 pouces
    ...

Discussions similaires

  1. Intercepter un Message Windows ? Créer un Composant Grille !
    Par TOTO32 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/07/2004, 13h41
  2. Réponses: 2
    Dernier message: 06/04/2004, 08h39
  3. Interception Messages Windows
    Par tiramisu dans le forum MFC
    Réponses: 5
    Dernier message: 24/02/2004, 14h01
  4. Réponses: 13
    Dernier message: 14/01/2004, 16h35
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25

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