獲取各種鼠標信息的方法


主要內容:

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM