主要內容:
- 鼠標雙擊的時間間隔
- 鼠標光標的閃爍頻率
- 鼠標的按鍵數目
- 鼠標等待時的光標
- 鼠標在窗體上的的位置
- 記錄鼠標的行為
- 截取系統信息判斷鼠標的單擊鍵
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; } } }
