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

Verifier l'état de la fenêtre d'un exe en C # - C#/.NET managed - Programmation

Marsh Posté le 07-09-2016 à 15:40:23    

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 :
  1. private static WINDOWPLACEMENT GetPlacement(IntPtr hwnd)
  2.         {
  3.             WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
  4.             placement.length = Marshal.SizeOf(placement);
  5.             GetWindowPlacement(hwnd, ref placement);
  6.             return placement;
  7.         }
  8.         [DllImport("user32.dll", SetLastError = true)]
  9.         [return: MarshalAs(UnmanagedType.Bool)]
  10.         internal static extern bool GetWindowPlacement(
  11.             IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
  12.         internal enum ShowWindowCommands : int
  13.         {
  14.             Hide = 0,
  15.             Normal = 1,
  16.             Minimized = 2,
  17.             Maximized = 3,
  18.         }
  19.         [Serializable]
  20.         [StructLayout(LayoutKind.Sequential)]
  21.         internal struct WINDOWPLACEMENT
  22.         {
  23.             public int length;
  24.             public int flags;
  25.             public ShowWindowCommands showCmd;
  26.             public System.Drawing.Point ptMinPosition;
  27.             public System.Drawing.Point ptMaxPosition;
  28.             public System.Drawing.Rectangle rcNormalPosition;
  29.         }
  30.         [DllImport("user32.dll" )]
  31.         private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
  32.         public static void MaximizeWindowIfMinized(string windowName,Timer tim,FlowLayoutPanel f1)
  33.         {
  34.             tim.Start();
  35.             Button btn = new Button();
  36.             Process[] procs = Process.GetProcesses();
  37.             try
  38.             {
  39.                 foreach (Process proc in procs)
  40.                 {
  41.                     if (proc.ProcessName.Contains(windowName))
  42.                     {
  43.                         var placement = GetPlacement(proc.MainWindowHandle);
  44.                         Console.WriteLine(placement.showCmd.ToString());
  45.                         if (placement.showCmd == ShowWindowCommands.Normal)
  46.                         {
  47.                             btn = new Button();
  48.                           //  btn.Width = 150;
  49.                           //  btn.Height = 120;
  50.                             f1.Controls.Add(btn);
  51.                          //   btn.Left = 500;                           
  52.                           //  btn.Visible = true;
  53.                             // btn.Click += button1_Click(windowName);
  54.                             tim.Stop();
  55.                         }
  56.                         tim.Start();
  57.                          if (placement.showCmd == ShowWindowCommands.Hide)
  58.                         {
  59.                             btn.Visible = false;
  60.                             tim.Stop();
  61.                         }
  62.                     }
  63.                 }
  64.             }
  65.             catch
  66.             {
  67.             }
  68.         }

Reply

Marsh Posté le 07-09-2016 à 15:40:23   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed