C#应用程序范围的鼠标左键单击事件

我想在我的表单中的任何地方单击鼠标左键时播放声音,而不必在表单中的每个控件上放置鼠标单击事件。 有办法实现这个目标吗?

您可以在将Windows通知发送到控件之前检测Windows通知,并将焦点与IMessageFilter接口配合使用。 使它看起来类似于:

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; } } 

这适用于项目中的任何表单,而不仅仅是主要表单。

这应该可以解决问题

 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); } 

这个项目可能对您的需求有些过分(因为它会挂钩全局鼠标事件,而不仅仅是表单上的事件),但我认为它显示了您需要的基础知识。