Событие щелчка левой кнопкой мыши во всем приложении C # - PullRequest
3 голосов
/ 29 октября 2011

Я хочу воспроизводить звук, когда левая кнопка мыши нажата в любом месте моей формы, без необходимости помещать события щелчка мышью на каждый элемент управления в форме. Есть ли способ сделать это?

Ответы [ 4 ]

7 голосов
/ 29 октября 2011

Вы можете обнаружить уведомление 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;
    }
}

Это работает для любой формы в вашем проекте, а не только для основной.

3 голосов
/ 29 октября 2011

Это должно сработать

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 голосов
/ 02 мая 2019

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

Использование для Vb или Vba

0 голосов
/ 29 октября 2011

Этот проект может быть излишним для ваших нужд (поскольку он перехватывает глобальные события мыши, а не только те, что указаны в вашей форме), но я думаю, что он показывает основы того, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...