C# Application-Wide Left Mouse Click Event

后端 未结 4 2118
春和景丽
春和景丽 2020-12-19 19:27

I want to play a sound when the left mouse button is clicked anywhere in my form without having to place Mouse click events on every single control in the form. Is there a w

相关标签:
4条回答
  • 2020-12-19 20:15

    Case WM_PARENTNOTIFY Select Case Wparam Case 513 ' WM_LBUTTODOWN PlaySoundA End Select

    Using For Vb Or Vba

    0 讨论(0)
  • 2020-12-19 20:16

    This should do the trick

    const int WM_PARENTNOTIFY = 0x210;
    const int WM_LBUTTONDOWN = 0x201;
    
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_LBUTTONDOWN || (m.Msg == WM_PARENTNOTIFY && (int)m.WParam == WM_LBUTTONDOWN)) 
             DoIt();
        base.WndProc(ref m);
    }
    
    0 讨论(0)
  • 2020-12-19 20:16

    This project may be overkill for your needs (since it hooks global mouse events, not just ones on your form), but I think it shows the basics of what you need.

    0 讨论(0)
  • 2020-12-19 20:22

    You can detect the Windows notification before it is dispatched to the control with the focus with the IMessageFilter interface. Make it look similar to this:

    public partial class Form1 : Form, IMessageFilter {
        public Form1() {
            InitializeComponent();
            Application.AddMessageFilter(this);
            this.FormClosed += delegate { Application.RemoveMessageFilter(this); };
        }
    
        public bool PreFilterMessage(ref Message m) {
            // Trap WM_LBUTTONDOWN
            if (m.Msg == 0x201) {
                System.Diagnostics.Debug.WriteLine("BEEP!");
            }
            return false;
        }
    }
    

    This works for any form in your project, not just the main one.

    0 讨论(0)
提交回复
热议问题