c#全应用程序鼠标左键单击事件

本文关键字:单击 事件 鼠标 应用程序 | 更新日期: 2023-09-27 18:12:38

我想在窗体中的任何地方单击鼠标左键时播放声音,而不必在窗体中的每个控件上放置鼠标单击事件。有办法做到这一点吗?

c#全应用程序鼠标左键单击事件

您可以在使用IMessageFilter接口将Windows通知分派给具有焦点的控件之前检测它。让它看起来像这样:

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

这个项目对于您的需求来说可能是多余的(因为它钩子全局鼠标事件,而不仅仅是窗体上的事件),但我认为它显示了您需要的基本内容。

Case WM_PARENTNOTIFY选择Case Wparam案例513 ' wm_lbuttdownPlaySoundASelect

使用Vb或Vba