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

时间:2017-06-14 16:42:48

标签: c# winforms io devexpress

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

我尝试了两种通过Control检索该信息的潜在方法,请参阅下面的PreFilterMessage:

    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.XtraBars.Docking.FloatForm,Text:

点击:第二路;

点击:第一路; DevExpress.XtraBars.Docking.FloatForm,Text:

点击:第二路;

点击:第一路; DevExpress.XtraBars.Docking.FloatForm,Text:

点击:第二路;

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

点击:第一路; DevExpress.XtraBars.Docking.FloatForm,Text:

点击:第二路; btnRefresh

//点击不同的网格/表格位置,不同的停靠面板,按不同的东西排序,选择整行。第二种方法是能够检测到正确网格中的动作,但不能检测正在进行的动作

点击:第一路; DevExpress.XtraBars.Docking.FloatForm,Text:

点击:第二路; abcgrid

点击:第一路; DevExpress.XtraBars.Docking.FloatForm,Text:

点击:第二路; abcgrid

点击:第一路; DevExpress.XtraBars.Docking.FloatForm,Text:

点击:第二路; abcgrid

0 个答案:

没有答案