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选择的值。

界面:

代码实现:

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; } } ///  /// 窗体加载 ///  ///  ///  private void FrmMain_Load(object sender, EventArgs e) { InitComboBox(); } ///  /// 初始化ComboBox ///  private void InitComboBox() { Dictionary dictGrade = new Dictionary(); 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"; } ///  /// 索引改变事件 ///  ///  ///  private void cmb_Grade_SelectedIndexChanged(object sender, EventArgs e) { //添加消息过滤 Application.AddMessageFilter(this); } } }

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

界面:

代码:

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(); } ///  /// 实现方法 ///  ///  ///  public bool PreFilterMessage(ref Message m) { //不响应鼠标右键 if (m.Msg >= 516 && m.Msg <= 517) { return true; } else { return false; } } ///  /// 禁用鼠标右键 ///  ///  ///  private void button1_Click(object sender, EventArgs e) { //添加消息 Application.AddMessageFilter(this); MessageBox.Show("鼠标右键已被禁止使用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } ///  /// 解决禁用鼠标右键 ///  ///  ///  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#实现鼠标消息捕获的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持0133技术站。

以上就是C#实现鼠标消息捕获的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 其他教程