获取各种鼠标信息的方法

主要内容:

鼠标双击的时间间隔

鼠标光标的闪烁频率

鼠标的按键数目

鼠标等待时的光标

鼠标在窗体上的的位置

记录鼠标的行为

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

1.鼠标的双击时间间隔

实现效果:

bd34d05b99320aeac059b4cb4aa49d44.png

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

声明语法如下:

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

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

主要实现代码如下:

[DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]public extern static intGetDoubleClickTime();private void Frm_Main_Load(objectsender, EventArgs e)

{

label1.Text="鼠标双击时间间隔:"+GetDoubleClickTime()+ "毫秒";

}

2.鼠标光标的闪烁频率

实现效果:

e86d5af883b5697d0886298e7987cc25.png

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

声明语法如下:

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

主要实现代码如下:

[DllImport("user32", EntryPoint = "GetCaretBlinkTime")]public extern static intGetCaretBlinkTime();private void Frm_Main_Load(objectsender, EventArgs e)

{

label1.Text= GetCaretBlinkTime()+ "毫秒";

}

3.鼠标的按键数目

实现效果:

40b2bc5fe916f809d0f945f7c0df4869.png

主要利用了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(intintcount);private void Form1_Load(objectsender, EventArgs e)

{int intCon =GetSystemMetrics(SM_CMOUSEBUTTONS);

label1.Text= intCon + "个";

}

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

4.鼠标等待时的光标

主要使用Form类的Cursor属性。

主要实现代码:

private void Form1_Load(objectsender, EventArgs e)

{this.Cursor =Cursors.WaitCursor;

}

5.鼠标在窗体上的位置

实现效果如图:

5807c9b8ea03d25f84b8ad2c269123e1.png

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

实现代码如下:

private void Frm_Main_MouseDown(objectsender, MouseEventArgs e)

{this.label1.Text = "X坐标" +e.X.ToString();this.label2.Text = "Y坐标" +e.Y.ToString();

}

6.记录鼠标的行为

实现效果:

180693d99f1c1fc1474723b46c95afcd.png

主要利用MouseEventArgs类的Button属性

主要实现代码:

private void Form1_MouseDown(objectsender, 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.截取系统信息判断鼠标的单击键

主要实现效果:

140df44f0972ea0712cd9b626e5ec899.png

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

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

实现代码:

583eb871f937c3660fc98a33f86bbf9c.gif

d3be0f255bf4dff462338be62353dd49.gif

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(refm);break;

}

}

View Code

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

实现代码:

f9524551eb1840b5532d376050e31fb3.gif

18c14211537df082442f011338a53c40.gif

MessageFilter mf = newMessageFilter();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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐