在C#Winform应用程序中记录鼠标点击的结果?

在C#Winform应用程序中记录鼠标点击的结果?,c#,winforms,io,devexpress,C#,Winforms,Io,Devexpress,我正在尝试在我的Win form应用程序中创建每次鼠标单击的日志,记录单击事件触发的方法或操作。这不仅包括与按钮交互,还包括与桌子、码头等交互(这就是我遇到的问题)。显然,我希望避免进入我之前的所有代码,并为每个事件手动添加日志条目。到目前为止,我已经有了一个MessageFilter,它可以很好地拦截每一次点击,但我还没有弄清楚如何获得关于点击实际作用的正确信息。我可以使用Control.FromHandle(m.HWnd)检测单击的按钮,但无法区分不同的停靠面板。任何关于这方面的信息都将不胜

我正在尝试在我的Win form应用程序中创建每次鼠标单击的日志,记录单击事件触发的方法或操作。这不仅包括与按钮交互,还包括与桌子、码头等交互(这就是我遇到的问题)。显然,我希望避免进入我之前的所有代码,并为每个事件手动添加日志条目。到目前为止,我已经有了一个MessageFilter,它可以很好地拦截每一次点击,但我还没有弄清楚如何获得关于点击实际作用的正确信息。我可以使用Control.FromHandle(m.HWnd)检测单击的按钮,但无法区分不同的停靠面板。任何关于这方面的信息都将不胜感激;如果我不能很快解决这个问题,我必须手动添加日志条目到所有内容中,我真的很想避免这种情况。谢谢

我尝试了两种可能的方法通过控件检索该信息,请参见下面的Prefilter消息:

    public bool PreFilterMessage(ref Message m)
    {
        // if click or doubleclick
        if (m.Msg == 0x201 || m.Msg == 0x0203)
        {
            var oneway = "1st way; " + form.FindForm().ActiveControl.ToString();
            string towrite = "";

            if (m.Msg == 0x201)
            { towrite += "CLICK    : "; }
            if (m.Msg == 0x203)
            { towrite += "DBLCLICK : "; }

            string anotherway = "1st way; " + "Unknown";
            Control ctl = Control.FromHandle(m.HWnd);
            if (ctl != null) anotherway = "1st way; " + ctl.Name;

            //log manager, just takes the log message string
            Admin.Information(towrite + oneway);
            Admin.Information(towrite + anotherway);

        }
        return false;
结果看起来像这样(夹杂着我的评论):

**注意:我正在使用DevExpress替换库存UI控件

//在主视图中选择不同的停靠面板,正如您所看到的那样,第二种方式不会显示任何内容

点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:

点击:第二条路

点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:

点击:第二条路

点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:

点击:第二条路

//点击一个自定义刷新按钮,第二种方式可以选择这个

点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:

点击:第二条路;btnRefresh

//单击不同的网格/表格位置,不同的停靠面板,按不同的内容排序,选择整条线。第二种方法能够在适当的网格中检测操作,但不能检测正在执行的操作

点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:

点击:第二条路;abcgrid

点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:

点击:第二条路;abcgrid

点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:


点击:第二条路;abcgrid

选择停靠面板/选项卡时检查ctl对象(在第一个示例中返回一个空行),它是System.Windows.Forms.MdiClient