主要内容:
- 鼠标双击的时间间隔
- 鼠标光标的闪烁频率
- 鼠标的按键数目
- 鼠标等待时的光标
- 鼠标在窗体上的的位置
- 记录鼠标的行为
- 截取系统信息判断鼠标的单击键
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; } }
<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; } } }