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# Winform实现导入和导出Excel文件

    让我为你详细解释一下“C# Winform实现导入和导出Excel文件”的完整攻略。 1. 需要用到的Nuget包 在C# Winform应用程序中,需要先安装Excel处理的Nuget包,在Visual Studio的Nuget包管理器中搜索NPOI,找到NPOI这个包,安装即可。 2. 导入Excel文件 下面是一个简单的示例程序,用于从Excel文件中…

    C# 2023年6月1日
    00
  • 利用Arduino制作音乐播放+随节奏闪光仪器实现

    1.实验器材 Arduino开发板,面包板一块,杜邦线若干,LED灯若干,220欧电阻若干,蜂鸣器一个。 2.实验操作 将六个led灯的正极依次接到arduino板I/O接口的2-7口, 电源负极依分别接一个220欧的电阻 。 整体负极接arduino板的GND接口。 蜂鸣器正极接arduino板I/O接口的8口,负极接GND。 3.代码实现 int buz…

    C# 2023年4月25日
    00
  • asp.net core中灵活的配置方式详解

    ASP.NET Core中灵活的配置方式详解 ASP.NET Core提供了多种配置方式,以便开发人员可以根据应用程序的需要选择最适合的配置方式。本文将介绍ASP.NET Core中的灵活配置方式,包括: appsettings.json文件 环境变量 命令行参数 用户机密存储 1. appsettings.json文件 appsettings.json文件…

    C# 2023年5月16日
    00
  • C#中的应用程序接口介绍及实现,密封类与密封方法

    当我们在进行C#编程时,应用程序接口(API)是非常重要的,它定义了我们的应用程序和其它程序之间的交互方式。在本文中,我们将会深入介绍C#中的应用程序接口及其实现,并探讨密封类与密封方法的特性和使用。 应用程序接口介绍及实现 应用程序接口可以定义为一组协议或规则,这些协议或规则允许不同的软件组件之间进行交互和通信。在C#中,接口通常使用interface关键…

    C# 2023年5月15日
    00
  • abp(net core)+easyui+efcore实现仓储管理系统——模块管理升级之上(六十一)

     Abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三…

    C# 2023年4月22日
    00
  • C#信号量用法简单示例

    当我们需要对一个或多个资源进行控制时,可以使用信号量。信号量是一种同步原语,它可以被用来跟踪资源的可用性。在这篇文章中,我们将会讲解C#中的信号量用法,包括信号量的基本操作和信号量用法的示例。 基本用法 在C#中,信号量可以通过System.Threading命名空间的Semaphore类来实现。Semaphore类封装了Windows内核对象,可以根据需要…

    C# 2023年5月15日
    00
  • C#字符串的截取函数用法总结

    下面是关于“C#字符串的截取函数用法总结”完整攻略的内容: 目录 介绍 SubString() 方法 Remove() 方法 示例说明 总结 介绍 在C#中,字符串截取是一种常见的操作。有许多方法可以截取 C# 字符串,其中最常用的是 SubString() 和 Remove() 方法。本文将对这两种方法进行详细的说明,并提供示例说明。 SubString(…

    C# 2023年6月8日
    00
  • 由vbs sort引发.NET Framework之间的关系说明

    由于题目中缺少具体的上下文,我假设这是一篇介绍VBScript(vbs)和.NET Framework之间关系的文章。以下是完整攻略: 1. VBScript与.NET Framework的关系 VBScript是一种基于COM(Component Object Model)的脚本语言,早期被广泛应用于Windows系统管理和自动化任务。而.NET Fram…

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