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 Forms Discussion :

Réaffichage Plein ecran appli dans systray


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Réaffichage Plein ecran appli dans systray
    Bonjour,

    Je develloppe une appli windows Form qui se lance en mode reduit dans le systray.

    Je fais un test à l'ouverture de l'appli sur les process afin d'eviter que celle-ci se lance plusieurs fois.

    Je voudrais néanmoins pouvoir à partir du raccourci présent dans le menu démarrer, non pas lancer une deuxième instance de l'application, mais ouvrir en plein ecran celle figurant dans le systray...

    Je n'ai rien trouvé de natif en c# quelques soit la version du framework utilisée permettant d'agir de la sorte.....

    Auriez-vous une idée ??

    Merci de votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Points : 230
    Points
    230
    Par défaut
    Bonjour,

    Il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    Tox

  3. #3
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Re.

    La solution ci-dessus ne fonctionne pas pour moi.

    Visisblement il y aurait deux solutions (pas tester) :

    - du FileMapping
    - récupérer le handle de la NotifyIcon (pas certain).

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Points : 230
    Points
    230
    Par défaut
    Bonjour,

    je ne sais pas si tu as trouvé la solution mais je poste pour les autres le code que j'utilise:

    Imports :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            #region DllImport
            [DllImport("User32.dll")]
            public static extern Int32 SetForegroundWindow(IntPtr hWnd);
            [DllImport("user32.dll")]
            private static extern bool ShowWindow(IntPtr hWnd, WindowShowStyle nCmdShow);
            #endregion DllImport
    Enum d’états fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    // States for windows
        public enum WindowShowStyle : uint
        {
            SW_HIDE = 0,
            SW_SHOWNORMAL = 1,
            SW_SHOWMINIMIZED = 2,
            SW_SHOWMAXIMIZED = 3,
            SW_MAXIMIZE = 3,
            SW_SHOWNOACTIVATE = 4,
            SW_SHOW = 5,
            SW_MINIMIZE = 6,
            SW_SHOWMINNOACTIVE = 7,
            SW_SHOWNA = 8,
            SW_RESTORE = 9,
            SW_SHOWDEFAULT = 10,
            SW_FORCEMINIMIZE = 11
        };
    Méthode qui récupère le handle de la fenêtre principale de l'appli si elle est lancée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
            /// <summary>
            /// Test si l'application est deja chargée
            /// </summary>
            /// <returns></returns>
            public static bool ApplicationLoaded(ref IntPtr mainHandle)
            {
                try
                {
                    Process pcur = Process.GetCurrentProcess();
                    Process[] ps = Process.GetProcesses();
     
                    foreach (Process p in ps)
                        if (pcur.Id != p.Id)
                            if (pcur.ProcessName == p.ProcessName)
                            {
                                mainHandle = p.MainWindowHandle;
                                return true;
                            }
                }
                catch (Exception ex)
                {
                    FormError.Instance.ShowError(ErrorPicture.Error, ex, Program.myCurrentControlOptions);
                }
                return false;
            }
    Dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
                    IntPtr mainHandle = IntPtr.Zero;
     
                    bool isLoaded = Utils.ApplicationLoaded(ref mainHandle);
     
                    if (isLoaded == false)
                    {
                        // Lancement normal
                        FormMain formMain = new FormMain();
     
                        Application.Run(formMain);
                    }
                    else
                    {
                        SetForegroundWindow(mainHandle);
                        ShowWindow(mainHandle, WindowShowStyle.SW_RESTORE);
                    }
    A+
    Tox

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/11/2010, 18h11
  2. Tous les USF d'une Appli en plein ecran
    Par gds35 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/02/2010, 17h24
  3. Soucis clavier virtuel windows + appli plein ecran
    Par winnyzeboss1 dans le forum MFC
    Réponses: 4
    Dernier message: 01/04/2009, 10h21
  4. Centrer un gridLayout dans une fenetre plein ecran
    Par jm49 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/03/2009, 14h29
  5. un flv dans un flash a mettre en plein ecran
    Par AnjouWeb dans le forum Intégration
    Réponses: 1
    Dernier message: 15/10/2008, 14h36

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