Verifier l'état de la fenêtre d'un exe en C #
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Verifier l'état de la fenêtre d'un exe en C #



  1. #1
    SniperCode

    Verifier l'état de la fenêtre d'un exe en C #


    ------

    Bonjour tout le monde,

    je suis en train de faire une application qui aura pour but d'utiliser des applications externes(exe) du genre MS Word,Excel, Calculatrice etc. De ce fait, j'ai réussi à ouvrir les applications mais lorsque les fenêtres de ces applications sont fermées je ne peux pas ramener la fenetre. Du coup, j'ai essayé de reproduire quelque chose avec un bout de code en le mettant dans une classe et l'appeler plus tard.
    Le but de cette classe sera : Lorsque je lance un exe un bouton se crée automatiquement dans un FlowPanel et lorsque la fenetre de l'exe est fermée, le bouton disparait.
    Mon soucis c'est qu'il y a une boucle dans le timer. Je ne sais pas comment l'arreter.
    Voici ce que j'ai essayé:
    Code:
    private static WINDOWPLACEMENT GetPlacement(IntPtr hwnd)
    
            {
    
                WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
    
                placement.length = Marshal.SizeOf(placement);
    
                GetWindowPlacement(hwnd, ref placement);
    
                return placement;
    
            }
    
     
    
            [DllImport("user32.dll", SetLastError = true)]
    
            [return: MarshalAs(UnmanagedType.Bool)]
    
            internal static extern bool GetWindowPlacement(
    
                IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
    
            internal enum ShowWindowCommands : int
    
            {
    
                Hide = 0,
    
                Normal = 1,
    
                Minimized = 2,
    
                Maximized = 3,
    
            }
    
     
    
            [Serializable]
    
            [StructLayout(LayoutKind.Sequential)]
    
            internal struct WINDOWPLACEMENT
    
            {
    
                public int length;
    
                public int flags;
    
                public ShowWindowCommands showCmd;
    
                public System.Drawing.Point ptMinPosition;
    
                public System.Drawing.Point ptMaxPosition;
    
                public System.Drawing.Rectangle rcNormalPosition;
    
            }
    
     
    
            [DllImport("user32.dll")]
    
            private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
    
            public static void MaximizeWindowIfMinized(string windowName,Timer tim,FlowLayoutPanel f1)
    
            {
    
                tim.Start();
    
                Button btn = new Button();
    
                Process[] procs = Process.GetProcesses();
    
                try
    
                {
    
     
    
    
    
                    foreach (Process proc in procs)
    
                    {
    
                        if (proc.ProcessName.Contains(windowName))
    
                        {
    
                            var placement = GetPlacement(proc.MainWindowHandle);
    
                            Console.WriteLine(placement.showCmd.ToString());
    
     
    
                            if (placement.showCmd == ShowWindowCommands.Normal)
    
                            {
    
     
    
                                btn = new Button();
    
                              //  btn.Width = 150;
    
                              //  btn.Height = 120;
    
                                f1.Controls.Add(btn);
    
                             //   btn.Left = 500;                           
    
                              //  btn.Visible = true;
    
                                // btn.Click += button1_Click(windowName);
    
                                tim.Stop();
    
                            }
    
                            tim.Start();
    
     
    
                             if (placement.showCmd == ShowWindowCommands.Hide)
    
                            {
    
                                btn.Visible = false;
    
                                tim.Stop();
    
     
    
                            }
    
     
    
                        }
    
                    }
    
                }
    
                catch
    
                {
    
     
    
                }
    
     
    
            }

    -----

  2. #2
    Bluedeep

    Re : Verifier l'état de la fenêtre d'un exe en C #

    Bonjour


    Difficile de répondre car on ne sait pas de quel type de Timer il s'agit (la variable tim je suppose).
    Par ailleurs, aucun event n'y étant abonné dans le code exposé, on ne voit pas du tout à quoi il sert.


    Par quoi est appelée la méthode MaximizeWindowIfMinized ?


    Par ailleurs, attention aux alignements par défaut dans l'utilisation de la classe attribut StructLayout avec la valeur LayoutKind.Sequential : suivant la taille des structures incluses (notamment si une longueur est impaire) et les options de compilation, il peut y avoir des "trous" dans le mapping mémoire de la structure décrite.
    Dernière modification par Bluedeep ; 07/09/2016 à 14h16.

  3. #3
    SniperCode

    Re : Verifier l'état de la fenêtre d'un exe en C #

    Ceci est une classe que j'utilise et que je l'appelle dans un Winform, de ce genre :
    Code:
     private void timer1_Tick(object sender, EventArgs e)
            {
    
               
               RestoreWindow.MaximizeWindowIfMinized("calc1", timer1, PIC_Barre);
    
               
             
    
            }
    Ce code servira de verification , si la fenetre de l'exe est ouverte on crée un bouton si la fenetre est fermée le bouton disparait.

Discussions similaires

  1. [Analogique] Vérifier l'état d'une ampoule
    Par Clemsouuuu dans le forum Électronique
    Réponses: 12
    Dernier message: 02/01/2016, 12h28
  2. Verifier l'état d'une pile avec un microcontroleur
    Par zdeguaine dans le forum Électronique
    Réponses: 16
    Dernier message: 27/03/2015, 14h54
  3. Réponses: 0
    Dernier message: 03/08/2014, 10h41
  4. Réponses: 3
    Dernier message: 31/10/2013, 20h23
  5. Diplôme d'état, diplome reconnu par l'état, titre homologué par l'état ?
    Par invite75931d9f dans le forum Orientation après le BAC
    Réponses: 1
    Dernier message: 02/03/2011, 16h47