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++/CLI Discussion :

Maximiser une application du systray


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 63
    Par d�faut Maximiser une application du systray
    Bonjour,

    j'ai une application et pour certaines raisons, je dois maximiser (=rendre visible et mettre au premier plan) une application contenue (MSN pour ne pas le citer) dans le systray. J'ai pour cela tenter plusieurs m�thodes sans succ�s :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                Process p = Process.GetProcessesByName("msnmsgr")[0];
                MessageBox.Show("Process : " + Process.GetProcessesByName("msnmsgr").Length);
                if (p != null)
                {
                   MessageBox.Show("id:" + p.Id + " name:" + p.ProcessName + " win:" + p.MainWindowHandle + " proc:" + p.Handle);
                   ShowWindow(p.MainWindowHandle, 9);
                   SetForegroundWindow(p.MainWindowHandle);
                }
    Je sais c'est un peu cracra comme code mais c'est du Proof Of Concept.
    Ce bout de code fonctionne quand l'application est dans la barre de t�ches mais une fois dans le systray, je perds le handle MainWindowHandle qui est = � 0. Du coup plus moyen de mettre la fen�tre en premier plan...

    Avez vous une solution ou des pistes pour r�ussir � r�aliser cette op�ration?

    Merci d'avance

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    F�vrier 2004
    Messages
    19 875
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur .NET
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 19 875
    Par d�faut
    Ca, c'est la faute de l'impl�mentation de Process.MainWindowHandle... En regardant l'impl�mentation en d�tail avec Reflector, tu verras qu'une fen�tre n'est consid�r�e comme fen�tre principale du process que si elle est visible (ce qui est un peu idiot � mon avis...).

    Par contre, tu peux t'inspirer de l'impl�mentation existante pour r�cup�rer toi m�me la fen�tre principale, � coups de P/Invoke d'API Windows natives.

    En r�sum� l'algo est le suivant :
    Code pseudo-code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    énumérer toutes les fenêtres avec l'API EnumWindows
    pour chaque fenêtre renvoyée par EnumWindows
        obtenir l'ID du process de la fenêtre avec l'API GetWindowThreadProcessId
        si ça correspond au process recherché
        alors
            vérifier que la fenêtre n'a pas de propriétaire (avec l'API GetWindow)
            vérifier que la fenêtre est visible (avec l'API IsWindowVisible)
            si toutes ces conditions sont remplies
            alors
              on considère que c'est la fenêtre principale, et on arrête l'énumération (return false)
            fin si
        fin si
        passer à la fenêtre suivante (return true)
    fin pour

Discussions similaires

  1. Comment maximiser une application ?
    Par iMaTh dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 24/11/2011, 08h43
  2. SetForegroundWindow d'une application dans le systray
    Par seb.49 dans le forum Windows Forms
    R�ponses: 2
    Dernier message: 18/02/2008, 11h48
  3. Insertion d'une Application dans le Systray
    Par mkiba dans le forum Langage
    R�ponses: 1
    Dernier message: 07/11/2007, 14h05
  4. Minimiser/Maximiser une application ext�rieure
    Par Duan dans le forum Delphi
    R�ponses: 10
    Dernier message: 11/05/2007, 14h50
  5. Message depuis une application systray
    Par giloutho dans le forum API, COM et SDKs
    R�ponses: 3
    Dernier message: 09/09/2005, 10h10

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