获取各种鼠标信息的方法

原文: 获取各种鼠标信息的方法

主要内容:

  1. 鼠标双击的时间间隔
  2. 鼠标光标的闪烁频率
  3. 鼠标的按键数目
  4. 鼠标等待时的光标
  5. 鼠标在窗体上的的位置
  6. 记录鼠标的行为
  7. 截取系统信息判断鼠标的单击键

1.鼠标的双击时间间隔

实现效果:

主要利用API函数GetDoubleClickTime(用于判断连续两次鼠标单击之间会被处理成双击事件的间隔时间)

声明语法如下:

 [DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
 public extern static int GetDoubleClickTime();

注意:在使用API函数时,应该首先在命名空间中添加System.Runtime.InteropServices命名空间。

主要实现代码如下:

[DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
public extern static int GetDoubleClickTime();
private void Frm_Main_Load(object sender, EventArgs e)
    {
        label1.Text ="鼠标双击时间间隔:"+GetDoubleClickTime()+ "毫秒";
    }

2.鼠标光标的闪烁频率

实现效果:

主要利用API函数GetCaretBlinkTime(用于判断插入符光标的闪烁频率)

声明语法如下:

 [DllImport("user32.dll", EntryPoint = "GetCaretBlinkTime")]
 public extern static int GetCaretBlinkTime();

主要实现代码如下:

[DllImport("user32", EntryPoint = "GetCaretBlinkTime")]
public extern static int GetCaretBlinkTime();
private void Frm_Main_Load(object sender, EventArgs e)
    {
        label1.Text = GetCaretBlinkTime()+ "毫秒";
    }

 3.鼠标的按键数目

实现效果:

主要利用了API函数GetSystemMetrics(用来返回与Windows环境有关的信息)

声明语法如下:

[DllImport("user32", EntryPoint = "GetSystemMetrics")]
public static extern int GetSystemMetrics(int intcount);

主要实现代码:

public const int SM_CMOUSEBUTTONS = 43;
[DllImport("user32", EntryPoint = "GetSystemMetrics")]
public static extern int GetSystemMetrics(int intcount);
private void Form1_Load(object sender, EventArgs e)
   {
        int intCon = GetSystemMetrics(SM_CMOUSEBUTTONS);
        label1.Text = intCon + "";
   }

注意:本实例在使用GetSystemMetrics函数时,为intcount参数定义了SM_CMOUSEBUTTONS常量值43,表示鼠标按键的数量,如果没有鼠标,则为0。

4.鼠标等待时的光标

主要使用Form类的Cursor属性。

主要实现代码:

private void Form1_Load(object sender, EventArgs e)
   {
       this.Cursor = Cursors.WaitCursor;
   }

5.鼠标在窗体上的位置

 实现效果如图:

主要利用了MouseEventArgs类的X属性与Y属性

实现代码如下:

 private void Frm_Main_MouseDown(object sender, MouseEventArgs e)
        {
            this.label1.Text = "X坐标" + e.X.ToString();
            this.label2.Text = "Y坐标" + e.Y.ToString();
        }

6.记录鼠标的行为

实现效果:

主要利用MouseEventArgs类的Button属性

主要实现代码:

private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            string str = label1.Text;
            if (e.Button == MouseButtons.Right)
            {
                str += "鼠标右键按下";
            }
            if (e.Button == MouseButtons.Left)
            {
                str += "鼠标左键按下";
            }
            if (e.Button == MouseButtons.Middle)
            {
                str += "鼠标中键按下";
            }
            label1.Text = str;
        }

7.截取系统信息判断鼠标的单击键

主要实现效果:

在C#中截取系统消息,有以下两种方案:

<1>在Form中重写Control类的虚方法WndProc来截取

实现代码:

protected override void WndProc(ref Message m)                             //方法一,重写WndProc虚方法,与方法二不可同时存在
        {
            switch (m.Msg)                                                           //判断系统消息的ID号
            {
                case 513:
                    MessageBox.Show("单击了鼠标左键!", "系统信息");
                    m.Result = (IntPtr)0;                                             //为响应消息处理而向Windows返回的值
                    break;
                case 516:
                    MessageBox.Show("单击了鼠标右键!", "系统信息");
                    m.Result = (IntPtr)0;                                             //为响应消息处理而向Windows返回的值
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }
View Code

<2>通过实现ImessageFilter接口来创建消息筛选器,从而截获

实现代码:

MessageFilter mf = new MessageFilter();
        private void Frm_Main_Load(object sender, EventArgs e)                       //窗体加载消息筛选器
        {
            Application.AddMessageFilter(mf);                                        //添加消息筛选器,以便在目标传送Windows消息时监视这些消息
        }

        private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e)     //从窗体中移除一个消息筛选器
        {
            Application.RemoveMessageFilter(mf);                                   //从应用程序的消息泵移除一个消息筛选器
        }
public class MessageFilter : IMessageFilter                                   //方法二,实现IMessageFilter接口,从而获得Windows消息,与方法一不可同时存在
        {
            public bool PreFilterMessage(ref Message message)                         //实现PreFilterMessage方法
            {
                switch (message.Msg)
                {
                    case 513:
                        MessageBox.Show("单击了鼠标左键!", "系统信息");
                        return true;
                    case 516:
                        MessageBox.Show("单击了鼠标右键!", "系统信息");
                        return true;
                    default:
                        return false;
                }
            }
        }
View Code

猜你喜欢

转载自www.cnblogs.com/lonelyxmas/p/10734959.html