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

yizhihongxing

首先,需要在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日

相关文章

  • asp.net实现的MD5加密和DES加解密算法类完整示例

    ASP.NET是微软开发的一个Web应用框架,可以使用C#或VB.NET等语言进行编写,同时它也提供了强密度加密算法,比如MD5和DES算法,用于对数据进行加密和解密。下面我来为您详细讲解“ASP.NET实现的MD5加密和DES加解密算法类完整示例”的攻略。 实现MD5加密算法类的示例 下面为您演示实现MD5加密算法类的完整示例代码: using Syste…

    C# 2023年5月31日
    00
  • asp.net 错误:0x8007000B 异常的解决方法

    针对”asp.net错误: 0x8007000B”异常的解决方法,我可以提供以下攻略: 1. 了解错误 在解决问题之前,首先需要了解错误的原因和表现。”0x8007000B”错误通常代表着”An attempt was made to load a program with an incorrect format.” 这个错误可能由于多种原因引起,比如操作系…

    C# 2023年5月15日
    00
  • .NET Core 离线生成 Tron 波场私钥和地址笔记

    NuGet 引入依赖库 PM> Install-Package Tron.Wallet.Net 随机生成私钥和对应的地址 using Tron.Wallet.Net; namespace ConsoleApp1 { internal class Program { static async Task Main(string[] args) { var …

    C# 2023年4月18日
    00
  • VC小技巧汇总之控件技巧

    VC小技巧汇总之控件技巧 简介 本篇攻略主要介绍VC小技巧汇总之控件技巧。在Windows程序编写中,控件是GUI界面中重要的元素之一。本篇攻略介绍了一些控件技巧,帮助开发者更好地使用控件。 控件技巧列表 以下是本篇攻略所涉及的控件技巧列表: 动态创建控件 在程序运行过程中动态创建控件,可以灵活地添加和移除控件。动态创建控件需要使用MFC控件类的Create…

    C# 2023年5月31日
    00
  • ASP.NET Core使用JWT认证授权的方法

    当使用ASP.NET Core构建Web应用程序时,使用JWT(JSON Web Token)进行身份验证和授权是一种常见的方法。JWT是一种轻量级的身份验证和授权机制,它使用JSON格式的令牌来传递用户信息和权限。 以下是使用ASP.NET Core进行JWT身份验证和授权的完整攻略: 步骤一:安装必要的NuGet包 在使用JWT进行身份验证和授权之前,需…

    C# 2023年5月17日
    00
  • windows中使用C# 调用 C语言生成的dll

    准备工作 首先,确保你会C#开发,并且已经安装好了Visual Studio。其次,我们需要准备一个C语言的dll,作为我们的示例,我们将使用以下的代码: #include <stdio.h> int add_numbers(int a, int b) { return a + b; } 保存以上代码到一个add_numbers.c的文件中。接下…

    C# 2023年6月1日
    00
  • C#异步编程由浅入深(一)

    下面是“C#异步编程由浅入深(一)”完整攻略的讲解: 异步编程的定义 异步编程(Asynchronous Programming)是指在执行耗时操作时,允许其他操作同时执行的编程方式。它可以让主程序不被阻塞,提高程序的并发能力和响应性能。 异步编程的模型 C#中的异步编程采用任务(Task)模型,它由以下几部分组成: Task的定义 Task是一个基本的异步…

    C# 2023年6月6日
    00
  • C#与PLC通讯的实现代码

    以下是完整攻略: C#与PLC通讯的实现代码 1. 简介 PLC与C#的通讯主要有以下两种方式: 使用PLC厂商提供的API接口进行通讯 使用第三方组件进行通讯 在这里,我们主要介绍第二种方式,使用第三方组件进行C#与PLC的通讯。 2. 第三方组件 目前市场上比较流行的PLC通讯组件有以下几个: OPC(OLE for Process Control) K…

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