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

Visual C++ Discussion :

Perte de focus d'une application


Sujet :

Visual C++

  1. #1
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut Perte de focus d'une application
    Bonjour,

    J'ai développé une appli non fenêtrée sur un pc industriel sans clavier ni souris mais dont l'écran est équipée d'une dalle tactile. Cette appli a maintenant 5 ans et depuis peu, il arrive qu'elle perde le focus. Je m'explique, de temps en temps, il semble qu'un processus sans IHM prenne le focus. Mon appli est toujours visible, mais la dalle tactile ne semble plus lui fournir de clic. La flèche de la souris se déplace pourtant correctement à l'endroit cliqué. Le simple fait de connecter un clavier et de générer un ALT-TAB permet de tout remettre en ordre, ce qui me fait penser que mon appli fonctionne normalement.
    Il y a effectivment sur le PC un processus qui tourne en tâche de fond et dont l'IHM est débrayée via une clé de registre. Je pense que c'est ce processus qui génère le problème.
    J'ai essayé d'implémenter dans mon Mainframe l'événement ON_WM_KILLFOCUS, mais il n'est généré que si c'est une autre fenêtre interne à mon appli qui le récupère.
    La méthode API GetForegroundWindow() détecte bien que mon appli n'a plus le focus, mais SetForegroundWindow échoue et émet un flash sur mon appli dans la barre des tâches, si la fenêtre qui a pris le focus n'est pas interne à l'appli .

    Est-ce que quelqu'un sait comment forcer ou remettre une appli au premier plan?

    Mon appli est dévelloppée en Visual C++ 6.0 et tourne indépendemment sur W2000 sp4 ou XP sp2.

  2. #2
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut Bonjour
    Peut- etre que je reconte des betises :
    T'a essayé BringWindowToTop(hwndFenetre)

  3. #3
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    Oui, j'ai aussi essayé BringWindowToTop sans plus de résultat. Ca marche uniquement si la fenêtre qui a pris le focus est interne à l'appli.
    Peut-on simuler un ALT TAB ?

  4. #4
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut Idem ?
    Encore, t'a essayé SetWindowPos?

  5. #5
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    Même résultat avec SetWindowPos, excepté que la méthode répond qu'elle a réussi.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 463
    Par défaut
    GetForegroundWindow ne permet pas de connaitre l'application qui vole le focus ?

  7. #7
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    Si, le retour est un HWNd sur la fenêtre qui prend le focus, mais je ne vois pas bien en quoi ça peut m'aider.

  8. #8
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    J'ai un peu de nouveau.
    Si à la détection de la perte de focus, je démarre une appli externe dont l'unique action est de repasser mon appli principale au premier plan, ça fonctionne avec SetForegroundWindow().
    J'ai du mal à comprendre...
    J'ai l'impression qu'on a le droit de donner le focus à une application externe mais pas de se le garder...

    La solution du processus autre me convient peu...

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    C'est typiquement du au fait qu'un process qui vient de se lancer a tendance à se lancer au premier plan...

    Sinon, peut-être peux tu jeter un coup d'oeil vers des fonctions comme LockSetForegroundWindow() ou changer le "foreground lock time-out" avec SystemParametersInfo()...

    Bref, essayer de jouer sur les conditions indiquées dans la doc de SetForegroundWindow()...
    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.

  10. #10
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    Mon compilateur ne connait pas LockSetForegroundWindow, ma version de msdn non plus. Quel header dois-je inclure ?

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    http://msdn.microsoft.com/en-us/libr...32(VS.85).aspx

    LockSetForegroundWindow est accessible dès Windows 2000 en incluant tout simplement <windows.h> (la déclaration elle-même est dans <winuser.h>).
    Peut-être te manque-t-il les defines qui vont bien ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _WIN32_WINNT 0x500
    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.

  12. #12
    dus
    dus est déconnecté
    Membre confirmé
    Homme Profil pro
    Informatique industrielle
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Par défaut
    merci.

    J'ai résolu mon pb avec SetWindowPos et le paramètre TopMost.

    merci à tous

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Attention, une fenêtre peut être topmost et ne pas avoir le focus...
    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.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2013, 07h39
  2. Contrôle de saisie sur une perte de focus d'une JTextfield
    Par comeochris dans le forum Composants
    Réponses: 3
    Dernier message: 03/04/2006, 15h21
  3. Comment détecter la perte de focus d'une fenêtre
    Par Leviathan_72 dans le forum Windows
    Réponses: 5
    Dernier message: 31/12/2005, 00h22
  4. excel -> test lors de la perte du focus d'une cellule
    Par greg778 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 26/09/2005, 17h26
  5. Focus sur une application Windows
    Par mixi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/10/2004, 19h57

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