I have used a mutex to run a single instance program, and now I want the window to become maximized if it is currently minimized when the user reopens the application.
Here is the code I currently have in my Program.cs file:
static class Program
{
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
bool Ok = true;
string ProductName = Application.ProductName;
Mutex m = new Mutex(true, ProductName, out Ok);
if (!Ok)
{
System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName(ProductName);
SetForegroundWindow(p[0].MainWindowHandle);
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
You’re looking for the
ShowWindowfunction and theSW_MAXIMIZEflag.In C#, the P/Invoke declaration would look like this:
Add it to your code here:
If you actually want to test whether the window is minimized first before you maximize it, you can use the old-school
IsIconicfunction:If you just want to activate the window (rather than maximize it), use the
SW_SHOWvalue (5) instead ofSW_MAXIMIZE. This will restore it to its previous state, before it was minimized.