服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#实现鼠标消息捕获

C#实现鼠标消息捕获

2023-02-15 15:58.NET开发菜鸟 C#

这篇文章介绍了C#实现鼠标消息捕获的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在C#中怎样禁用鼠标按键,我们可以通过ImessageFilter接口下的PreFilterMessage方法、Application类的AddMessageFilter方法,RemoveMessageFilter方法和Message结构的Msg属性来禁用鼠标左键。Message结构包装Windows发送的消息,可使用该结构包装消息,并将其分配给窗口过程以进行调度,还可以使用该结构获取系统向应用程序或控件发送的关于某个消息的信息。

使用PreFilterMessage方法在调度消息之前将其筛选出来。语法格式如下: 

Bool PreFilterMessage(ref Message m)

参数说明:

  • m:要调度的消息,无法修改此消息。
  • 返回值:如果筛选消息并禁止消息被调度,则为True;如果允许消息继续到达下一个筛选器或控件,则为False。使用AddMessageFilter方法添加消息筛选器以便在向目标传送Windows消息时监视这些消息。使RemoveMessageFilter 从应用程序的消息泵移除一个消息筛选器。

示例一:在ComboBox选择值的时候,选择的值会随鼠标滚轮的滑动而改变,有时候不小心滑动了滑轮,导致选择的值改变,在下面的示例中,通过禁用鼠标滚轮,防止鼠标滚轮的滑动改变ComboBox选择的值。

界面:

C#实现鼠标消息捕获

代码实现:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace MouseDemo
{
    public partial class FrmMain : Form,IMessageFilter
    {
        public FrmMain()
        {
            InitializeComponent();
        }
 
        public bool PreFilterMessage(ref Message m)
        {
            if (m.Msg == 522)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
 
        /// <summary>
        /// 窗体加载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmMain_Load(object sender, EventArgs e)
        {
            InitComboBox();
        }
 
        /// <summary>
        /// 初始化ComboBox
        /// </summary>
        private void InitComboBox()
        {
            Dictionary<int, string> dictGrade = new Dictionary<int, string>();
            dictGrade.Add(1, "一年级");
            dictGrade.Add(2, "二年级");
            dictGrade.Add(3, "三年级");
            dictGrade.Add(4, "四年级");
            dictGrade.Add(5, "五年级");
            dictGrade.Add(6, "六年级");
 
            BindingSource dataSource = new BindingSource();
            dataSource.DataSource = dictGrade;
            cmb_Grade.DataSource = dataSource;
            cmb_Grade.DisplayMember = "Value";
            cmb_Grade.ValueMember = "Key";
        }
 
        /// <summary>
        /// 索引改变事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmb_Grade_SelectedIndexChanged(object sender, EventArgs e)
        {
              //添加消息过滤
            Application.AddMessageFilter(this);
        }
 
 
    }
}

示例二:窗体设置右键控件,演示禁用和解除禁用右键功能,右键菜单只有复制、剪切、粘贴三项

界面:

C#实现鼠标消息捕获

代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace MouseRightDemo
{
    public partial class FrmMouseRight : Form   ,IMessageFilter
    {
        public FrmMouseRight()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 实现方法
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        public bool PreFilterMessage(ref Message m)
        {
            //不响应鼠标右键
            if (m.Msg >= 516 && m.Msg <= 517)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
 
        /// <summary>
        /// 禁用鼠标右键
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
               //添加消息
            Application.AddMessageFilter(this);
            MessageBox.Show("鼠标右键已被禁止使用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
 
        /// <summary>
        /// 解决禁用鼠标右键
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
                //移除消息
            Application.RemoveMessageFilter(this);
            MessageBox.Show("鼠标右键已被解除禁止使用,可以使用鼠标右键", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

鼠标动作常见参数:

鼠标移动:512

鼠标左键:

down:513 up:514

double click:515

鼠标右键:

down:516 up:517

鼠标滚轮:522

到此这篇关于C#实现鼠标消息捕获的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/dotnet261010/p/6691332.html

延伸 · 阅读

精彩推荐
  • C#C#6 null 条件运算符

    C#6 null 条件运算符

    本文主要对比C# 6 null运算符与老版本的不同,并且用代码实例测试,发现新语法性能提高,语法简化了。希望看到的同学对你有所帮助...

    C#教程网10672021-11-30
  • C#C#中值类型和引用类型解析

    C#中值类型和引用类型解析

    这篇文章主要为大家详细介绍了C#中值类型和引用类型的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Amedeo12052022-01-24
  • C#C# 编译生成dll文件供程序调用的两种方法

    C# 编译生成dll文件供程序调用的两种方法

    这篇文章主要介绍了C# 编译生成dll文件供程序调用的两种方法,需要的朋友可以参考下...

    seeyou-3402022-02-21
  • C#C#实现多文件打包压缩(.Net Core)

    C#实现多文件打包压缩(.Net Core)

    本文详细讲解了.Net Core框架下C#实现多文件打包压缩的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    Nine_Jason5812022-12-14
  • C#WinForm天猫双11自动抢红包源码分享

    WinForm天猫双11自动抢红包源码分享

    这篇文章主要为大家分享了WinForm天猫双11自动抢红包源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    polk611152021-12-08
  • C#C# FileStream复制大文件

    C# FileStream复制大文件

    这篇文章主要为大家详细介绍了C# FileStream复制大文件的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    xiaohu8022022-07-21
  • C#C#编程自学之流程控制语句

    C#编程自学之流程控制语句

    本文主要介绍流程控制语句,主要包括条件控制语句和循环控制语句的使用。读者学习本文后,应该熟练掌握C#控制语句的主要用途和使用方法,了解这些...

    C#教程网5722021-10-29
  • C#C#程序加密工具.Net Reactor详细教程

    C#程序加密工具.Net Reactor详细教程

    .Net Reacto加密工具是一款强大的 .NET 代码保护和授权管理系统,安全可靠、简单易用,主要用来帮助开发人员保护他们的 .NET 软件产品,本文给大家详细介...

    香煎三文鱼3762022-12-29