C# Winform 实现屏蔽键盘的win和alt+F4的实现代码

首先,需要在C# Winform程序的窗体类中重载WndProc方法,并且引用System.Windows.Forms命名空间。在WndProc方法中,可以通过重写系统消息 WM_HOTKEY,来监听并屏蔽键盘按键事件,实现屏蔽win和alt+F4的功能。

具体实现步骤如下:

1.引用命名空间 System.Windows.Forms:

using System.Windows.Forms;

2.在窗体类中添加键盘Hook:

public partial class Form1 : Form
{
    private const int WM_HOTKEY = 0x0312;  //定义系统消息的整型值
    private const int MY_HOTKEY_ID = 1;   //定义热键的ID值

    [DllImport("user32.dll")]  //引用系统dll
    public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);

    [DllImport("user32.dll")]  //引用系统dll
    public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

    public Form1()
    {
        InitializeComponent();
    }

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);

        switch (m.Msg)
        {
            case WM_HOTKEY:
                switch (m.WParam.ToInt32())
                {
                    case MY_HOTKEY_ID:
                        //执行热键事件
                        break;
                    default:
                        break;
                }
                break;
            default:
                break;
        }
    }
}

3.在窗体加载时注册热键,并且在窗体关闭时注销热键:

private void Form1_Load(object sender, EventArgs e)
{
    //注册热键
    RegisterHotKey(this.Handle, MY_HOTKEY_ID, 0, (int)Keys.LWin);  //屏蔽Win键
    RegisterHotKey(this.Handle, MY_HOTKEY_ID, 1, (int)Keys.F4);    //屏蔽Alt + F4键
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    //注销热键
    UnregisterHotKey(this.Handle, MY_HOTKEY_ID);
}

通过上述实现,我们就可以完成屏蔽Win和Alt+F4键的功能。

下面给出一个具体实例来帮助理解:

假设我们的应用程序是一个窗体类Form1,窗体上有一个按钮Button1。我们需要屏蔽Win和Alt+F4键,在窗体中添加代码:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private const int WM_HOTKEY = 0x0312;  //定义系统消息的整型值
        private const int MY_HOTKEY_ID = 1;   //定义热键的ID值

        [DllImport("user32.dll")]  //引用系统dll
        public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);

        [DllImport("user32.dll")]  //引用系统dll
        public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

        public Form1()
        {
            InitializeComponent();
        }

        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);

            switch (m.Msg)
            {
                case WM_HOTKEY:
                    switch (m.WParam.ToInt32())
                    {
                        case MY_HOTKEY_ID:
                            //执行热键事件
                            break;
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //注册热键
            RegisterHotKey(this.Handle, MY_HOTKEY_ID, 0, (int)Keys.LWin);
            RegisterHotKey(this.Handle, MY_HOTKEY_ID, 1, (int)Keys.F4);
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            //注销热键
            UnregisterHotKey(this.Handle, MY_HOTKEY_ID);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello World!");
        }
    }
}

在上述代码中,我们注册了两个热键:Win键和Alt+F4键。同时,在窗体的单击事件中添加了一个简单的消息框,用于测试屏蔽功能是否正常。

运行程序后,当用户按下Win键或Alt+F4键时,程序将无法响应,保护了程序不被误操作关闭。当用户单击按钮Button1时,消息框将正常显示,验证了我们的屏蔽功能。

另外一个示例,可以通过重载ProcessCmdKey方法,来在窗体类中屏蔽键盘按键事件。具体实现代码如下:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if ((keyData == Keys.LWin) || ((keyData & Keys.Alt) == Keys.Alt && (keyData & Keys.F4) == Keys.F4))
    {
        return true;  //屏蔽Win键和Alt+F4键
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

通过这种方式,我们也能很方便地实现Win和Alt+F4键的屏蔽功能,并且代码实现也比较简单。需要注意的是,ProcessCmdKey方法只能屏蔽指定的键,无法屏蔽复合键或多个键的组合。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Winform 实现屏蔽键盘的win和alt+F4的实现代码 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • c#发送请求访问外部接口的实例

    下面是详细的讲解“c#发送请求访问外部接口的实例”的完整攻略。 1. 创建HttpClient实例 使用HttpClient类发送HTTP请求。HttpClient类位于System.Net.Http命名空间中。可以在项目中添加对System.Net.Http命名空间的引用来使用HttpClient类。 示例代码: using System.Net.Http…

    C# 2023年5月31日
    00
  • 关于C#基础知识回顾–反射(三)

    关于C#基础知识回顾–反射(三)这篇文章的完整攻略如下: 一、反射简介 1.1 反射的概念 反射(Reflection)是指在程序运行的时候访问、检测和修改程序集中的元数据和对象的方式。反射用于访问 .NET 中的元数据,这种元数据描述了程序集(assembly)、模块(module)和类型(type)等。通过元数据,我们可以获取类型信息,了解类的结构和成…

    C# 2023年6月1日
    00
  • C# wx获取token的基本方法

    C# wx获取token的基本方法 什么是Token? 在微信公众号开发中,Token是指在微信公众平台上,通过接口调用获取到的一个用于对当前公众号进行身份验证的字符串。 获取Token的基本方法 获取Token的基本方法是向微信服务器发送HTTP请求。发送请求的URL是: https://api.weixin.qq.com/cgi-bin/token?gr…

    C# 2023年5月31日
    00
  • C#使用Newtonsoft.Json中的JObject对象

    当我们需要在C#应用程序中处理JSON数据时,可以使用Newtonsoft.Json库。该库提供了许多用于处理JSON数据的类和方法,其中一个非常有用的类是JObject。 JObject类表示一个JSON对象,它的属性通常是一个或多个JToken对象。以下是使用JObject操作JSON数据的完整攻略。 步骤1:导入Newtonsoft.Json库 首先,…

    C# 2023年5月31日
    00
  • C#表达式和运算符详细解析

    C#表达式和运算符详细解析 表达式和运算符简介 在C#中,表达式指的是由操作数和运算符组成的计算式。而运算符则是被用于操作数据的符号。C#支持多种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。 算术运算符 C#支持基本的算术运算符,包括加、减、乘、除、取模。 int x = 1; int y = 2; int result = x + y; /…

    C# 2023年5月31日
    00
  • C# 获取汉字的拼音首字母

    下面是关于如何在C#中获取汉字的拼音首字母的攻略: 安装NuGet包 在使用C#编写代码之前,需要先安装相应的NuGet包。在Visual Studio的NuGet包管理器中搜索“NPinyin”并安装。 导入命名空间 完成NuGet包的安装后,需要在代码文件的顶部导入“NPinyin”命名空间,如下所示: using NPinyin; 调用API获取拼音 …

    C# 2023年6月7日
    00
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

    通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus) 通过前面三篇文章的介绍,我们已经对.net co…

    C# 2023年5月7日
    00
  • 正确使用dotnet-*工具的方法

    使用 dotnet- 工具是在 .NET Core 中执行各种任务的一种方便的方法。这些工具包括 dotnet build、dotnet run、dotnet test 等。以下是正确使用 dotnet- 工具的完整攻略: 步骤一:安装 .NET Core SDK 首先,需要安装 .NET Core SDK。可以从 Microsoft 的官方网站下载并安装 …

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部