Not sure if you can actually track that mouse event but you could handle the FormClosing event instead.

Are you trying to detect these events on your form? If so, here's an example:

To use the example:

  • Add a MenuStrip named: menuStrip1
  • Add a ToolStripMenuItem named: File
  • Add a ToolStripMenuItem named: Close

  • Add "MouseDown" and "MouseUp" events

        private void closeToolStripMenuItem_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                Console.WriteLine("Left mouse down.");
            }//if
        }
    
        private void closeToolStripMenuItem_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                Console.WriteLine("Left mouse up.");
            }//if
        }
    

Edited 2 Years Ago by cgeier

If you simply try to detect when the app is closing, use the advice darkagn gave you.

Otherwise you have to use Windows API calls. I used this search engine and found this code. It should be a good starting point.

HTH

Edited 2 Years Ago by Teme64: Posted twice. Sorry :)

Here’s what I found. Though it’s not exactly what I originally posted for but at least it narrows down to my requirement.

Instead of identifying separately if the user clicked the Close button at the top right corner of the title bar of the form or the ‘Close’ option in the system menu, or he/she pressed the Alt+F4 keys, we can combine these factors together to check if the user is consuming the system command (i.e. any of the above three techniques) to close the form or is doing so programmatically. If the system command is used, action is taken accordingly; else we ignore.

A button is used to close down the form programmatically without any interruption.

public partial class Form1 : Form
    {
        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_CLOSE = 0xF060;

        public Form1()
        {
            InitializeComponent();
        }

        protected override void WndProc(ref Message m)
        {
            // Check if the user is consuming the system command to close the form.
            if ((m.Msg == WM_SYSCOMMAND) && ((int)m.WParam == SC_CLOSE))
            {
                MessageBox.Show("Form closing by system command. Take necessary actions here...");
            }

            base.WndProc(ref m);
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
This question has already been answered. Start a new discussion instead.