使用 MessageFilter 捕获控件上的单击事件
本文关键字:单击 事件 控件 MessageFilter 使用 | 更新日期: 2023-09-27 18:36:16
我试图用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 或其他过滤器捕获点击事件?
否(一句话)。消息过滤器是它在锡上所说的,它过滤系统窗口消息。它与托管代码无关,它是侦听Windows消息并过滤它们。
但是,一旦捕获,您就可以对消息做出反应并执行任何您喜欢的操作 - 即调用所需的托管代码,跟踪键或鼠标位置等。在这种情况下,您需要找到鼠标位置并检查单击是否位于控件上,然后手动调用单击事件。