我尝试使用IMessageFilter
和PreFilterMessage
抓住我的应用控件上的点击事件。但我只能抓住鼠标点击,而不是来自控件的事件。
在我的应用程序中,我需要来自控件的消息来记录控件的名称和类型。
我使用以下代码来捕获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事件?
答案 0 :(得分:2)
否(总之)。 MessageFilter就是它所说的,它过滤系统窗口消息。它与托管代码无关,它正在侦听Windows消息并过滤它们。
然而,一旦被捕获,您可以对消息做出反应并做任何您喜欢的事情 - 即调用您想要的托管代码,跟踪键或鼠标位置等。在您的情况下,您需要找到鼠标位置并检查是否单击控件,然后手动调用click事件。