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

Windows Discussion :

GetMessage dans une DLL


Sujet :

Windows

  1. #1
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut GetMessage dans une DLL
    Bonjour,

    j'aurai voulu utiliser la fonction GetMessage pour récupèrer des évènements hardware dans une DLL non MFC, sous Pocket PC.

    si j'utilise GetMessage (recup globale, NULL pour le handle) directement dans la fonction de ma dll appelé par le prog principale, je récupère bien tout les messages, mais le reste de l'application reste bloqué tant que la boucle pour GetMessage n'est pas terminé...

    Donc, j'ai créé un thread, mais dans le thread la fonction GetMessage(NULL...) ne récupère rien... il faut que j'utilise la fonction "PostThreadMessage" pour qu'il récupère un message... ce qui ne me sert plus à rien...

    Quelqu'un voit il une solution à mon problème, pour que l'application ne soit pas bloqué, et que je puisse récupèrer les messages windows ?

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    GetMessage est normalement appelé en boucle. C'est pas l'appel à GetMessage qui bloque, c'est ta boucle while().
    Quel message veux-tu récupérer ? Comment est utilisée ta dll ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    GetMessage() ne récupère que les messages du thread appelant.

    Si tu veux que le thread reçoive les messages, tu dois créer tes fenêtres avec ce thread-là (ou bien peut-être jeter un coup d'oeil à AttachThreadInput(), je ne sais pas si cette fonction peut t'aider ou non...)

  4. #4
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    Merci de vos réponses.

    c'est effectivement GetMessage utilisé dans le thread qui bloque, vu qu'aucun message ne lui parviens.
    Je précise que ce ne sont pas des messages applicatif que je cherche à récupèrer, mais des messages hardware...

    Est ce que la fonction AttachThreadInput me permétrait de de faire ma boucle avec GetMessage dans le thread, et récupèrer tout les messages hardware ?

    pas trouvé beaucoup de doc sur cette fonction...
    je peux l'utiliser directement dans la fonction de la dll qui est appelé, ou cela ne marche qu'avec les paramètres (IdThread1, IdThread2, TRUE) ?

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Tu n'as pas répondu à mes questions.
    Si c'est WM_DEVICECHANGE:
    A window receives this message through its WindowProc function
    ce qui devrait résoudre tous tes problèmes.

  6. #6
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    heu... bah je comprends pas ta question
    WM_DEVICECHANGE connais pas...
    bon, j'essaye quand meme...

    - GetMessage est bloquant tant qu'il n'y a pas de message dans la queue (ce qui est le cas lors de l'appel dans un thread), au contraire de PeekMessage...

    - Je souhaite récupèrer des messages hardwares (touche, periphérique bluetooth, etc...)

    - ma dll est appellé par un seul programme, dont je n'ai pas accès (pour info M-Bussiness sur PocketPC)

  7. #7
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Mais concrètement c'est quel message que tu veux gérer ?
    La plupart des messages sont destinés à une fenêtre, la boucle GetMessage...DispatchMessage est simplement là pour faire le routage.
    Ma question sur la dll, c'est si la fonction qu'elle exporte peut être bloquante ou si elle doit rendre la main (genre fonction Init()).
    Il n'y a pas de message "hardware" de touche clavier, une fenêtre (et non un thread) reçoit les messages de clavier si elle a le focus. Le thread est rarement le destinaire d'un message, mais souvent un simple intermédiaire.

  8. #8
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    ok, je comprends mieux...

    bon, c'est des messages venant d'un périphérique bluetooth (lecteur RFID).

    effectivement, je ne pensais pas que les messages hardware n'étais envoyé qu'à la fenêtre ayant le focus...
    Je sais que les fonctions Hook ne fonction pas sous PocketPC, mais je pensais qu'il y avait d'autre moyen...

    en gros, c'est une appli sur un navigateur spécifique (M-Business), qui permet de lancer des fonctions d'une dll... donc je ne souhaite pas avoir d'autre interface utilisateur...
    - un bouton javascript qui lance la fonction de la dll (ça ok pas de pb), permettant la connection bluetooth, et un thread à l'écoute de ce périphérique...
    - un bouton javascript qui arrête l'écoute (kill du thread)
    - si le thread recois le bonne evenement, hop, retour de la valeur dans une zone texte du navigateur (ça pas de pb non plus)

    donc, dans la dll:
    une fonction d'init qui démarre l'écoute (non bloquante)
    un thread d'écoute des evenements du périphérique (ou d'un bouton hard)
    une fonction d'arrêt

    d'après toi, possible sans les fonctions hook ?

Discussions similaires

  1. [MDI][DLL] Enfant MDI dans une dll
    Par Pascal Jankowski dans le forum Composants VCL
    Réponses: 5
    Dernier message: 02/04/2004, 08h41
  2. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 09h57
  3. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 22h36
  4. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 10h32
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 11h15

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