使用MessageFilter捕获控件上的Click事件

时间:2012-06-04 12:33:47

标签: c# .net events

我尝试使用IMessageFilterPreFilterMessage抓住我的应用控件上的点击事件。但我只能抓住鼠标点击,而不是来自控件的事件。

在我的应用程序中,我需要来自控件的消息来记录控件的名称和类型。

我使用以下代码来捕获if (m.Msg >= 513 && m.Msg <= 515)的鼠标事件:

public class TestMessageFilter : IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {
        // Filter click events with a message number ?
        if (m.Msg == ?)
        {
            // Log stuff
        }
        return false;
    }
}

有没有办法用IMessageFilter或其他过滤器捕获Click事件?

1 个答案:

答案 0 :(得分:2)

否(总之)。 MessageFilter就是它所说的,它过滤系统窗口消息。它与托管代码无关,它正在侦听Windows消息并过滤它们。

然而,一旦被捕获,您可以对消息做出反应并做任何您喜欢的事情 - 即调用您想要的托管代码,跟踪键或鼠标位置等。在您的情况下,您需要找到鼠标位置并检查是否单击控件,然后手动调用click事件。