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 { } }
-----