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 :

Canceliser l'appel API sendmessage


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    903
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 903
    Points : 85
    Points
    85
    Par défaut Canceliser l'appel API sendmessage
    Bonjour,

    Je pense que jevais avoir du mal à expliquer.
    L'api SendMessage permet d'envoyer un message à un controle HWND et reste bloquant jusqu'a la fin de traitement de la fonction WndProc, bref

    J'aurais besoin de votre aide ,
    Dans mon WndProc j'aurais besoin à moment donnée d'annuler tous les appels sendmessages à destination de mon WndProc.

    Je pense que je n'aurais pas de réponse.

    J'ai developper une console virtuel (HWND), et developper une fonction équivalent à scanf pour ma console virtuel.

    Dés la reception de l'évenement WM_READKEY (fonction à moi WM_USER+4) , SendMessage est bloquant jusqu'a l'appuie d'une touche, jusque là c'est normal , (dependant evidemment des événément WM_CHAR et WM_KEYDOWN).

    Le probléme : quand je m'amuse à resizer sans arrêt l'OS envoie un évenement WM_SIZE jusque là c'est normal, mais l'envoie de l'évenement WM_SIZE peux se bloquer car ma fonction WndProc est déjà occuper pour mon evenement WM_READKEY (qui est une fonction à moi) , du coup Windows se bloque.
    Et je ne sais pas comment faire ,
    la solution c'est d'annuler tous les appels WM_SIZE au moment ou le message WM_READKEY est reçu.

    Dés l'appuie d'une touche , l'évenement WM_SIZE s'achéve.

    et je n'ai pas de solution , et j'ai du mal à expliquer.

    Donc comment annuler les sendmessages (WM_SIZE) ? est ce possible ?
    Dans mon évenement WM_READKEY Si j'arrive à annuler les WM_SIZE , je pourais tripoter la fenêtre contenant ma console virtuel sans à ce que Windows se bloque.

    J'envoie donc un évenement WM_READKEY pour signaler à ma console virtuelle d'attendre l'appuie d'une touche.

    Bien sure le message WM_READKEY fait office de ProcessMessages (en delphi application.processmessages) utilisant l'api GetMessage TranslateMessage etc ..... logiquement il y a donc un petit recursif de l'appel à WndProc.

    Pour info WM_READKEY n'existe pas dans les API Windows , mais c'est mon propre événement de message.

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    Soit tu gères un deuxième thread qui se charge des tâches synchrones (ton WM_READKEY), soit tu remplaces le SendMessage par un SendMessageTimeOut et tu t'arranges pour vider la pile de messages sur le TimeOut (Application.ProcessMessages).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    903
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 903
    Points : 85
    Points
    85
    Par défaut
    C'est bon ,je me suis débrouiller autrement , en passant un HEVENT et WaitForSingleObject.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par yann458 Voir le message
    C'est bon ,je me suis débrouiller autrement , en passant un HEVENT et WaitForSingleObject.
    Sans multithread, WaitForSingleObject sans timeOut sera bloquant comme SendMessage !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    903
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 903
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Sans multithread, WaitForSingleObject sans timeOut sera bloquant comme SendMessage !
    Je suis d'accord , mais mon Readln est dans un autre thread.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/03/2014, 13h03
  2. Appel de SendMessage sans effet dans une tâche planifiée
    Par Laurent Dardenne dans le forum Windows
    Réponses: 2
    Dernier message: 23/09/2013, 17h10
  3. [CS3] Ouverture fichier : Un appel API a été interrompu anormalement
    Par Jeronimo3 dans le forum EDI/Outils
    Réponses: 0
    Dernier message: 18/10/2011, 09h51
  4. Appel API JAVA depuis VB
    Par vince29 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/04/2008, 10h23
  5. [DELPHI6][API] SendMessage
    Par Desraux dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 07/06/2005, 11h32

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