89

I know that I can get the current state by WindowState, but I want to know if there's any event that will fire up when the user tries to minimize the form.

LarsTech
  • 79,075
  • 14
  • 143
  • 215
Jorge Branco
  • 2,415
  • 4
  • 25
  • 19

4 Answers4

126

You can use the Resize event and check the Forms.WindowState Property in the event.

private void Form1_Resize ( object sender , EventArgs e )
{
    if ( WindowState == FormWindowState.Minimized )
    {
        // Do some stuff
    }
}
Steve Dignan
  • 7,832
  • 6
  • 28
  • 34
81

To get in before the form has been minimised you'll have to hook into the WndProc procedure:

    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_MINIMIZE = 0xF020; 

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    protected override void WndProc(ref Message m)
    {
        switch(m.Msg)
        {
            case WM_SYSCOMMAND:
                int command = m.WParam.ToInt32() & 0xfff0;
                if (command == SC_MINIMIZE)
                {
                    // Do your action
                }
                // If you don't want to do the default action then break
                break;
        }
        base.WndProc(ref m);
    }

To react after the form has been minimised hook into the Resize event as the other answers point out (included here for completeness):

private void Form1_Resize (object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do your action
    }
}
ChrisF
  • 131,190
  • 30
  • 250
  • 321
  • 0xF030 is when maximizing from normal window state. 0xF120 is when maximizing from the windows bar – k4yaman Oct 19 '17 at 09:54
  • Actually, this only catches the Minimize *Click* event! What you're looking for is WM_SIZE (0x0005) & SIZE_MINIMIZED (1) – Ori Nachum Dec 27 '17 at 08:51
17

I don't know of a specific event, but the Resize event fires when the form is minimized, you can check for FormWindowState.Minimized in that event

Dan F
  • 11,784
  • 3
  • 47
  • 71
7

For people who search for WPF windows minimizing event :

It's a bit different. For the callback use WindowState :

private void Form1_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do some stuff
    }
}

The event to use is StateChanged (instead Resize):

public Main()
{
    InitializeComponent();
    this.StateChanged += Form1_Resize;
}
Stealth Rabbi
  • 9,786
  • 18
  • 95
  • 166