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 way to accomplish this?
Asked
Active
Viewed 3,937 times
4
-
Consider looking at WPF instead of WinForms. WPF events are automatically bubbled up to parent controls, so this would be trivial. – Joe White Oct 28 '11 at 21:13
4 Answers
8
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.

Hans Passant
- 922,412
- 146
- 1,693
- 2,536
-
Awesome! Thank you! Oh and the value for the left mouse button for me was `m.Msg == 0x0201` – Spidermain50 Nov 01 '11 at 20:37
4
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);
}

L.B
- 114,136
- 19
- 178
- 224
-
Awesome beans. Been searching ages for this + sooo simple. Cheers dude. – stigzler Jan 13 '18 at 13:00
0
Case WM_PARENTNOTIFY Select Case Wparam Case 513 ' WM_LBUTTODOWN PlaySoundA End Select
Using For Vb Or Vba

A.Gerailly
- 1
- 4
0
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.

MusiGenesis
- 74,184
- 40
- 190
- 334
-
1It's useful occasionally to globally hook mouse or keyboard... but never hook globally what you can process locally. – Jason Williams Oct 28 '11 at 21:57