C#实现鼠标消息捕获
作者:.NET开发菜鸟 发布时间:2021-06-14 20:38:38
标签: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;
}
}
/// <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);
}
}
}
示例二:窗体设置右键控件,演示禁用和解除禁用右键功能,右键菜单只有复制、剪切、粘贴三项
界面:
代码:
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
来源:https://www.cnblogs.com/dotnet261010/p/6691332.html


猜你喜欢
- 本文为大家分享了android实现图片橡皮擦和快速染色的具体代码,供大家参考,具体内容如下源码地址:Eraselmg1.染色 &n
- java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径package com.liuxing.test;import java.
- 用java swing写的一个简单的五子棋游戏。下面是Main.java。package com.crossing.main;import
- Java基础 Servlet * 详解 1 概念:Servlet * ,用来监听web容器的一些对象状态的变化,主要是Servle
- 前言:线程安全是并发编程中的重要关注点,造成线程安全问题的主要原因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据
- 文章描述在前面两篇写完了对于GIF动态图片的分割和合成,这一篇来写下将视频文件分割成一帧帧图片的方法。开发环境.NET Framework版
- 我们平时使用的一些常见队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了De
- 一、前言今天我们来说一说 Spring Bean 的生命周期,小伙伴们应该在面试中经常遇到,这是正常现象。因为 Spring Bean 的生
- 前言: 由于前段时间,项目组长分配的任务是要完成一个在线编写SQL并要实现查询功能的需求,最终需要将查询到的数据以JSON格式显示到响应数据
- 介绍Java状态模式(State Pattern)是一种面向对象的设计模式,它将对象的状态封装成独立的状态对象,并将对象的行为与状态对象解耦
- 起源 [1946: John von Neumann, Stan Ulam, and Nick Metropolis, all a
- 概述ConcurrentHashMap(CHM)是日常开发中使用频率非常高的一种数据结构,想对于普通的HashMap,CHM提供了线程安全的
- 本文为大家分享了类似微信朋友圈,点击+号图片,可以加图片功能,供大家参考,具体内容如下xml:<?xml version="
- name hobbyTom &nb
- 1.向上转型 向下转型2.强制类型转换的应用应用多态性时由于引用为父类类型,导致编译时只能调用父类中声明的属性和方法。子类特有的属性和方法不
- 不是很难的知识,但是今天犯错了,记录一下什么是 stream 流我们在使用集合或数组对元素进行操作时往往会遇到这种情况:通过对不同类型的存储
- 1.栈和队列的共同特点是(只允许在端点处插入和删除元素)4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构)5.下列关于栈的叙述正确
- 最近做了一个小工具,在Winform中对Picture控件有一个需求,可以通过鼠标从外部拖拽图片到控件的上,释放鼠标,显示图片!首先你需要对
- 了解内存的原理1、内存是由 Key 和 Value 组成,Key 是内存地址、Value 是存储的数据;2、Key:是一个32位长度的二进制
- 1 前言前文已经讲述了Spring BeanFactory 与 FactoryBean 的区别详情,